#python #pandas #linear-regression
#python #pandas #линейная регрессия
Вопрос:
Я искал в Google справку по этой ошибке и пробовал использовать манекены, но пока ничего не помогло. Мой код:
df_movies_train_reg = df_movies[df_movies['Release Year'] < 2014]
df_movies_test_reg = df_movies[df_movies['Release Year'] > 2013]
df_train = pd.DataFrame()
df_test = pd.DataFrame()
df_train['x'] = df_movies_train_reg['Theaters in First Week'].copy()
df_train['y'] = df_movies_train_reg['Worldwide Gross'].copy()
df_test['x'] = df_movies_test_reg['Theaters in First Week'].copy()
df_test['y'] = df_movies_test_reg['Worldwide Gross'].copy()
df_train['x^2'] = df_train['x'] * df_train['x']
X_reg = df_train[['x', 'x^2']]
y_reg = df_train[['y']]
reg = LinearRegression()
model = reg.fit(X_reg, y_reg)
score = model.score(df_test[['x']], df_test[['y']])
Набор данных представляет собой список из 2328 строк, обучающий набор, оставшийся после фильтрации по годам, составляет всего 2037 строк, тестовый набор — тогда 291 строка.
ValueError Traceback (most recent call last)
<ipython-input-116-aee4ec5bd647> in <module>
50 model = reg.fit(X_reg, y_reg)
51
---> 52 score = model.score(df_test[['x']], df_test[['y']])
53
54
~Anaconda3libsite-packagessklearnbase.py in score(self, X, y, sample_weight)
326
327 from .metrics import r2_score
--> 328 return r2_score(y, self.predict(X), sample_weight=sample_weight,
329 multioutput='variance_weighted')
330
~Anaconda3libsite-packagessklearnlinear_modelbase.py in predict(self, X)
211 Returns predicted values.
212 """
--> 213 return self._decision_function(X)
214
215 _preprocess_data = staticmethod(_preprocess_data)
~Anaconda3libsite-packagessklearnlinear_modelbase.py in _decision_function(self, X)
196 X = check_array(X, accept_sparse=['csr', 'csc', 'coo'])
197 return safe_sparse_dot(X, self.coef_.T,
--> 198 dense_output=True) self.intercept_
199
200 def predict(self, X):
~Anaconda3libsite-packagessklearnutilsextmath.py in safe_sparse_dot(a, b, dense_output)
171 return ret
172 else:
--> 173 return np.dot(a, b)
174
175
ValueError: shapes (291,1) and (2,1) not aligned: 1 (dim 1) != 2 (dim 0)
Комментарии:
1. Проблема в том, что вы обучались на 2D-вводах и пытаетесь выполнить одномерный ввод?
2. Почему нет
df_test['x^2']
? Вы должны набирать очки в той же форме, что и тренировочные данные. например, что-то вродеmodel.score(df_test[['x', 'x^2]], df_test[['y']])
3. Да, @Криса и @Натан, спасибо вам! Это было исправлено путем добавления
x^2
столбца и изменения его также в параметре score, как сказал Крис.