Большая разница в баллах (10%) между split_test_train и перекрестной проверкой - PullRequest
0 голосов
/ 10 июля 2020

У меня проблема с классификацией: 2500 строк. 25000 столбцов 88 разных классов неравномерно распределены

А потом произошло нечто очень странное:

Когда я запускаю дюжину разных поездов сплит-тестов, я всегда получаю около 60% ...

И когда я запускаю перекрестную проверку, я всегда получаю около 50%. Вот экран: введите описание изображения здесь Более того, это не имеет ничего общего с неравномерным распределением классов, потому что, когда я помещаю stratify = y в TTS, я остаюсь на уровне около 60%, а когда я устанавливаю StratifiedKFold, я остаюсь на уровне 50%.

Что запомнить? Почему разница? Для меня резюме было просто последовательностью разбиений тестовых поездов с разными разбиениями друг от друга, поэтому ничто не оправдывает такую ​​разницу в баллах.

Ответы [ 2 ]

1 голос
/ 19 июля 2020

Короткий ответ: добавьте shuffle = True в ваш KFold: cross_val_score (forest, X, y, cv = KFold (shuffle = True))

Длинный ответ: разница между последовательностью TrainTestSplit и перекрестием -Валидация с помощью classi c KFold заключается в том, что в TTS есть микс перед разделением между поездом и набором тестов. Разница в оценках может быть связана с тем, что ваш набор данных отсортирован предвзято. Так что просто добавьте shuffle = True в свой KFold (или в StratifiedKFold, и это все, что вам нужно сделать).

0 голосов
/ 11 июля 2020

Первый образец кода возвращает 5 значений, затем вы узнаете 4/5 данных и действительны на 1/5. Второй пример изучается 5/6 и действителен 1/6, и результаты лучше.

Может быть, вы можете попробовать выполнить for k in range(5), чтобы увидеть, есть ли у вас большая разница в оценке?

...