Я пытался создать регрессионную модель, чтобы предсказать кинопрокат. Набор данных был получен из набора данных Kaggle-TMDB 5000 Movie вместе с другим набором данных, который содержит некоторые атрибуты, связанные с социальными сетями.
После слияния и очистки окончательный набор данных состоит из 183 наблюдений и 53 функций. Были расширены две категориальные функции, жанр и production_countries. Например, новые столбцы, такие как "Действие", "Драма", "Комедия"... и т.д. И значение равно 1, если этот фильм принадлежит к этому жанру. То же, что и production_countries.
Я использовал набор данных для создания моей модели регрессии, но у меня возникла проблема. Независимо от того, использую метод разделения поездов или метод перекрестной проверки или пробую другую регрессионную модель, полученная мной RMSE была безумно высокой.
from sklearn.model_selection import cross_val_predict
X=movie.drop('Gross',axis=1)
y=movie['Gross']
print 'R2:',r2_score(y,cross_val_predict(RandomForestRegressor(),X,y,cv=10))
print 'RMSE:',np.sqrt(metrics.mean_squared_error(y,cross_val_predict(method,X,y,cv=10)))
output:
R2: 0.344831741145
RMSE: 76169019.1588
Я не знаю, какие факторы приводят к такой ситуации. Может кто-нибудь помочь мне здесь? Большое спасибо.
Кажется, что вы правильно вычисляете RMSE, я бы проверил меру R2 и попытался сделать это вручную, чтобы быть уверенным.
Но я попытался бы более подробно рассмотреть концепцию, если мы проверим следующую ссылку: http://brenocon.com/rsquared_is_mse_rescaled.pdf
Мы можем заметить, что
r2 = 1 - MSE (x, y)/VAR (y)
Если MSE → 0, следовательно, RMSE → 0 и r2 → 1.
Но если RMSE → +inf, MSE → +inf, и если MSE <= VAR (y), это приведет к значениям r2 ниже 1, например 0,2, 0,3 и т.д. Таким образом, ваши результаты могут поместить ваш анализ в нужное положение трек.