Разделите тестовый набор на подгруппу, затем сделайте прогноз для каждой подгруппы отдельно
У меня есть набор данных, похожий на следующую таблицу:
Целью прогноза будет столбец "Оценка". Мне интересно, как я могу разделить набор тестов на разные подгруппы, такие как оценка от 1 до 3, или затем проверить точность в каждой подгруппе.
Теперь то, что у меня есть, выглядит следующим образом:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
model = tree.DecisionTreeRegressor()
model.fit(X_train, y_train)
for i in (0,1,2,3,4):
y_new=y_test[(y_test>=i) & (y_test<=i+1)]
y_new_pred=model.predict(X_test)
print metrics.r2_score(y_new, y_new_pred)
Тем не менее, мой код не работает, и это трассировка, которую я получаю:
Найдены входные переменные с непоследовательным количеством выборок: [14279, 55955]
Я попробовал решение, представленное ниже, но похоже, что для полного диапазона очков (0-5) r^2 составляет 0,67. но подкорковый диапазон, например (0-1,1-2,2-3,3-4,4-5), r^2, значительно ниже, чем у полного диапазона. не должны ли некоторые из подкорков r^2 быть выше 0,67, а некоторые из них - ниже 0,67?
Может ли кто-нибудь любезно сообщить мне, где я поступил неправильно? Большое спасибо за вашу помощь.
1 ответ
Когда вы вычисляете метрики, вы должны фильтровать предсказанные значения (на основе вашего подмножества).
В основном вы пытаетесь вычислить
metrics.r2_score([1,3],[1,2,3,4,5])
который создает ошибку,
ValueError: Найдены входные переменные с непоследовательным количеством выборок: [2, 5]
Следовательно, мое предлагаемое решение будет
model.fit(X_train, y_train)
#compute the prediction only once.
y_pred = model.predict(X_test)
for i in (0,1,2,3,4):
#COMPUTE THE CONDITION FOR SUBSET HERE
subset = (y_test>=i) & (y_test<=i+1)
print metrics.r2_score(y_test [subset], y_pred[subset])