Линейная регрессия

#matplotlib #linear-regression

#matplotlib #линейная регрессия

Вопрос:

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

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

 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:

В начале вашего кода вы определяете 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 первоначальное определение, и все должно быть в порядке.