Проблема с Train_test раскол Scikit-Learn - PullRequest
0 голосов
/ 02 ноября 2019

Я работал над следующей задачей классификации с использованием классификатора Random Forests.

No. of classes = 11
Y = 50
X = 100

Я использовал 75% -й поезд и 25% -ный тест.

Однако, когда я вычислял матрицу путаницы,диагональное значение (27) больше 25.

from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(test_Y, y_prediction)
print (conf_matrix)

[[17  2  0  0  0  0  0  0  0  0  0]
 [ 1 12  2  0  0  0  0  0  0  6  0]
 [ 0  0 22  0  0  0  0  0  2  0  0]
 [ 0  0  0 16  0 12  1  0  0  0  1]
 [ 0  1  0  0 19  0  0  0  6  0  0]
 [ 0  0  0  7  0 18  2  0  0  0  0]
 [ 0  0  0  0  0  0 20  1  0  0  0]
 [ 2  2  2  0  0  0  0 27  0  3  0]
 [ 0  0  0  0  8  1  0  0 13  0  0]
 [ 0  1  0  0  0  1  0  0  0 16  4]
 [ 0  0  0  0  0  0  0  1  0 12 14]]

Когда я исследовал причину, разделение теста поезда не работает, как ожидалось.

yy, counts = np.unique(Y, return_counts=True)
print (yy, counts)

[ 0  1  2  3  4  5  6  7  8  9 10] [100 100 100 100 100 100 100 100 100 100 100]

train_X, test_X, train_Y, test_Y  = train_test_split(X, Y, test_size=0.25, random_state=42)

Но,

yy, counts = np.unique(test_Y, return_counts=True)
print (yy, counts)

[ 0  1  2  3  4  5  6  7  8  9 10] [19 21 24 30 26 27 21 36 22 22 27]

1 Ответ

1 голос
/ 02 ноября 2019

Нет, они не все 25 после разделения train_test;но они должны были быть. Не так ли?

Они не должны быть, потому что вы не просили стратифицированное разделение поезда / теста;измените его на:

train_X, test_X, train_Y, test_Y  = train_test_split(X, Y, test_size=0.25, 
                                                     stratify=Y,
                                                     random_state=42)
...