Разделите тестовый набор на подгруппу, затем сделайте прогноз для каждой подгруппы отдельно

У меня есть набор данных, похожий на следующую таблицу:

Целью прогноза будет столбец "Оценка". Мне интересно, как я могу разделить набор тестов на разные подгруппы, такие как оценка от 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])
Другие вопросы по тегам