плохая точность с cross_val_score - PullRequest
1 голос
/ 05 марта 2020

Для классификации машинного обучения, я использую перекрестную проверку с 10 сгибами:

kfold = StratifiedKFold(n_splits=10)

Я разделяю данные поезда / теста:

X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, y, test_size=0.3 )

Для классификатора, 10 сгибов Среднее значение точности getted:

cross_val_score(classifier, X_train, y=Y_train, scoring='accuracy', cv=kfold, n_jobs=4))

Это дает мне среднее значение точности 0,62.

Чтобы подтвердить значение точности, я делаю прогноз:

Y_pred_train = classifier.predict(X_train)

print(metrics.classification_report(Y_train, Y_pred_train))

Я получил: точность отзыва Поддержка f1-Score

       0       0.92      0.96      0.94      2523
       1       0.95      0.89      0.92      1923

accuracy                           0.93      4446

macro avg 0.93 0.93 0.93 4446 weighted avg 0.93 0.93 0.93 4446

Эта точность не совпадает с приведенной выше. Как это объяснить? Большое спасибо. Théo

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Проблема здесь в том, что вы тренируете модель на X_train, а затем запускаете прогнозирование для точно такого же набора данных:

Y_pred_train = classifier.predict(X_train)

Вы, очевидно, получаете отличную оценку, поскольку модель может хорошо вписаться в данные обучения. Точка машинного обучения заключается в работе с ранее невидимыми данными, т.е. обобщение того, что было известно во время обучения. Чтобы устранить проблему, просто запустите прогноз и сообщите данные испытаний:

Y_pred_test = classifier.predict(X_test)

print(metrics.classification_report(Y_test, Y_pred_test))
0 голосов
/ 07 марта 2020

Спасибо тебе. На самом деле я хочу сравнить полученное значение точности с помощью функций cross_val_score () и .predict (). Для меня в одном и том же наборе данных поезда оба должны быть идентичны.

Но полученное значение точности не совпадает с функцией cross_val_score () и функцией классификатора предиката.

Посмотрите, я тренирую cross_val_score () и прогнозируем () в одном наборе данных поезда. Значение точности для cross_val_score (, X_train, y = Y_train, скоринг = 'точность', cv = kfold, n_jobs = 4)) => дайте мне 0,62.

Значение точности для .predict (X_train) = > дать мне 0,92 (после того, как я определил лучшие гиперпараметры для моего классификатора.)

Может ли низкое значение точности для cross_val_score быть объяснено гиперпараметрами по умолчанию, когда я вызываю cross_val_score (, X_train, y = Y_train, scoring = 'precision ', cv = kfold, n_jobs = 4))?

Большое спасибо. Тео

...