Линейная регрессия - PullRequest
0 голосов
/ 14 апреля 2019

Моя постановка проблемы: следующий набор данных показывает результат недавно проведенного исследования о соотношении количества часов, проведенных за рулем, с риском развития острой боли в спине.Найдите уравнение линии наилучшего соответствия для этих данных.

Набор данных выглядит следующим образом:

x   y
10  95
9   80
2   10
15  50
10  45
16  98
11  38
16  93

Характеристики машины: Linux Ubuntu 18.10 64bit

У меня есть некоторыеошибка:

python LR.py
Accuracy :
43.70948145101002
[6.01607946]
Enter the no of hours10
y :
0.095271*10.000000+5.063367
Risk Score :  6.016079463451905
Traceback (most recent call last):
File "LR.py", line 30, in <module>
plt.plot(X,y,'o')
File "/home/sumeet/anaconda3/lib/python3.6/site- 
packages/matplotlib/pyplot.py", line 3358, in plot
ret = ax.plot(*args, **kwargs)
File "/home/sumeet/anaconda3/lib/python3.6/site- 
packages/matplotlib/__init__.py", line 1855, in inner
return func(ax, *args, **kwargs)
File "/home/sumeet/anaconda3/lib/python3.6/site- 
packages/matplotlib/axes/_axes.py", line 1527, in plot
for line in self._get_lines(*args, **kwargs):
File "/home/sumeet/anaconda3/lib/python3.6/site- 
packages/matplotlib/axes/_base.py", line 406, in _grab_next_args
for seg in self._plot_args(this, kwargs):
File "/home/sumeet/anaconda3/lib/python3.6/site- 
packages/matplotlib/axes/_base.py", line 383, in _plot_args
x, y = self._xy_from_xy(x, y)
File "/home/sumeet/anaconda3/lib/python3.6/site- 
packages/matplotlib/axes/_base.py", line 242, in _xy_from_xy
"have shapes {} and {}".format(x.shape, y.shape))
ValueError: x and y must have same first dimension, but have 
shapes (8, 1) and (1,)

Код следующий:

import matplotlib.pyplot as plt
import pandas as pd

# Read Dataset
dataset=pd.read_csv("hours.csv")
X=dataset.iloc[:,:-1].values
y=dataset.iloc[:,1].values

# Import the Linear Regression and Create object of it
from sklearn.linear_model import LinearRegression
regressor=LinearRegression()
regressor.fit(X,y)
Accuracy=regressor.score(X, y)*100
print("Accuracy :")
print(Accuracy)

# Predict the value using Regressor Object
y_pred=regressor.predict([[10]])
print(y_pred)

# Take user input
hours=int(input('Enter the no of hours'))

#calculate the value of y
eq=regressor.coef_*hours+regressor.intercept_
y='%f*%f+%f' %(regressor.coef_,hours,regressor.intercept_)
print("y :")
print(y)
print("Risk Score : ", eq[0])
plt.plot(X,y,'o')
plt.plot(X,regressor.predict(X));
plt.show()

1 Ответ

1 голос
/ 14 апреля 2019

В начале вашего кода вы определяете y, который вы, вероятно, хотите построить:

y=dataset.iloc[:,1].values

, но далее вы переопределяете (и, следовательно, перезаписываете) его как

y='%f*%f+%f' %(regressor.coef_,hours,regressor.intercept_)

, который вызывает ошибку, так как этот последний y является строкой, а не массивом с 8 элементами, такими как X (и как ваш начальный y).

Измените его с помощьючто-то еще, например Y, в соответствующих строках в конце:

Y='%f*%f+%f' %(regressor.coef_,hours,regressor.intercept_)
print("Y :")
print(Y)

, чтобы сохранить ваш y в соответствии с первоначальным определением, и с вами все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...