Кривая ROC для Kfold в Scikit-learn. Хорошо работает для StratifiedKfold, но показывает ошибку для Kfold

Я хочу построить кривую ROC с помощью перекрестной проверки Kfold. Однако код, приведенный на странице scikit-learn, предназначен для StratifiedKfold. Таким образом, когда я меняю StratifiedKfold на Kfold, он дает мне None результатов на графиках. В чем может быть проблема?

Пример кода находится по адресу ScikitLearn

Я заменил StratifiedKfold на Kfold, но он не работает.


person Kumar    schedule 27.01.2019    source источник
comment
Покажите нам код, который вы использовали.   -  person Andronicus    schedule 27.01.2019
comment
@Andronicus Спасибо за ваш отзыв. Не могу скопировать код в комментариях. Однако код присутствует по указанной ниже ссылке scikit-learn.org/stable/auto_examples/model_selection/   -  person Kumar    schedule 27.01.2019


Ответы (1)


Перед разрезанием складок перемешайте данные:

cv = KFold(n_splits=6, shuffle=True)

Объяснение:

StratifiedKFold сокращает складки таким образом, чтобы доля классов в каждой складке была примерно такой же, как и во всем наборе данных. Kfold этого не делает и просто вырезает складки из образцов в порядке их появления в наборе данных. Следовательно, вы можете получить или не получить все существующие классы во всех складках. В этом случае или в Iris наборе данных образцы отсортированы по классам, это можно увидеть из целевого y:

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

Следовательно, в случае 6-кратного разделения большую часть времени вы получаете только один класс за раз, и вся тренировка модели прерывается. Перемешивание позволяет KFold подбирать оба класса в каждом сгибе, и все работает нормально.

person Artem Trunov    schedule 27.01.2019
comment
Спасибо за такое красивое объяснение. В моем случае у меня 40 образцов. Таким образом, я хотел применить 40 складок. Но с перетасовкой все равно результат монашеский. Другими словами, мы можем сказать, что моя проблема использует перекрестную проверку LOO. Вы знаете, как с этим справиться? - person Kumar; 28.01.2019
comment
40 складок для 40 образцов - это много. Обычно не более 10 складок. И чем меньше количество выборок, тем меньше складок вам нужно, потому что большее количество обучающих выборок на кратность дает лучшее качество модели. - person Artem Trunov; 29.01.2019
comment
Братан, ты прав. Но на самом деле предыдущие исследования, проведенные с набором данных, использовали перекрестную проверку LOO. Чтобы сравнить мой метод с предыдущими методами, я пытаюсь нарисовать схему проверки ROC для LOO. Есть ли способ построить ROC для перекрестной проверки LOO ??? - person Kumar; 29.01.2019
comment
Думаю, это заслуживает отдельного вопроса. Нужно вычислить статистику по оставшимся выборкам? так что может потребоваться дополнительное кодирование. В этом вопросе я показал вам, почему KFold не работает и что может заставить его работать, т.е. ответил на заданный вопрос. - person Artem Trunov; 29.01.2019
comment
Спасибо, братан, за ваш отзыв. - person Kumar; 29.01.2019