我在使用SciKit Learn时遇到了问题。
我正在做一个非常简单的线性回归问题。基于学习时间和相应的成绩输入值,我希望能够根据学生的学习时间来估计他们的成绩。
In [1]: import pandas as pdIn [2]: path = 'Desktop/hoursgrades.csv'In [3]: df = pd.read_csv(path)In [4]: X = df['Hours Studied']In [5]: y = df['Grade']In [6]: training_data_in = list() In [7]: training_data_out = list()In [8]: training_data_in.append(X)In [9]: training_data_out.append(y) In [11]: from sklearn.linear_model import LinearRegressionIn [12]: model = LinearRegression(n_jobs =-1) In [13]: model.fit(X = training_data_in, y = training_data_out)Out[13]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=-1, normalize=False)
在这个例子中,数据框看起来是这样的:
In [16]: dfOut[16]: Hours Studied Grade0 1 10.01 2 20.02 3 30.03 4 40.04 5 50.05 6 60.06 7 70.07 8 80.08 9 90.09 10 100.0
而X看起来是这样的:
In [17]: XOut[17]: 0 11 22 33 44 55 66 77 88 99 10Name: Hours Studied, dtype: int64
而y看起来是这样的:
In [18]: yOut[18]: 0 10.01 20.02 30.03 40.04 50.05 60.06 70.07 80.08 90.09 100.0Name: Grade, dtype: float64
到目前为止,一切顺利,似乎接受了我输入的所有数据。现在,我想用一些输入数据来测试模型。所以,我想要说,这个学生学习了5个小时,让模型告诉我预期的成绩。
但当我将数据输入模型时,我得到了下面的错误。
有谁可以提供建议吗?
In [14]: studied_hour = [[5]]In [15]: outcome = model.predict(X = studied_hour)---------------------------------------------------------------------------ValueError Traceback (most recent call last)<ipython-input-15-6fdab4ae2efd> in <module>()----> 1 outcome = model.predict(X = studied_hour)~/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/base.py in predict(self, X) 254 Returns predicted values. 255 """--> 256 return self._decision_function(X) 257 258 _preprocess_data = staticmethod(_preprocess_data)~/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/base.py in _decision_function(self, X) 239 X = check_array(X, accept_sparse=['csr', 'csc', 'coo']) 240 return safe_sparse_dot(X, self.coef_.T,--> 241 dense_output=True) + self.intercept_ 242 243 def predict(self, X):~/anaconda3/lib/python3.7/site-packages/sklearn/utils/extmath.py in safe_sparse_dot(a, b, dense_output) 138 return ret 139 else:--> 140 return np.dot(a, b) 141 142 ValueError: shapes (1,1) and (10,10) not aligned: 1 (dim 1) != 10 (dim 0)
我应该补充的是:
In [39]: X.shapeOut[39]: (10,)In [40]: y.shapeOut[40]: (10,)
回答:
X
和 y
的输入形状不正确,根据文档,X
应为 (n_samples, n_features)
,y
应为 (n_samples,)
。
您看到错误是因为模型认为您有十个特征和十个不同的输出(因此是 (10, 10))。
通过使用以下代码,您可以得到正确的结果:
X = df[['Hours Studied']] # 注意双括号,形状为 (10, 1)y = df['Grade']model = LinearRegression().fit(X, y)model.predict([[5]])array([50.])