Разделите тестовый набор на подгруппу, затем сделайте прогноз для каждой подгруппы отдельно - PullRequest
0 голосов
/ 12 февраля 2019

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

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

0 голосов
/ 12 февраля 2019

Когда вы вычисляете метрики, вам необходимо отфильтровать прогнозные значения (на основе вашего подмножества).

В основном вы пытаетесь вычислить

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])
...