В чем разница между получением значения баллов из kfold, fit, score против использования cross_val_score? - PullRequest
1 голос
/ 30 марта 2020

Кажется, по сути c, но я не вижу разницы и преимуществ или недостатков между следующими 2 способами:

первый путь:

    kf = KFold(n_splits=2)
    for train_index, test_index in kf.split(X):
        X_train, X_test = X.iloc[train_index], X.iloc[test_index]
        y_train, y_test = y.iloc[train_index], y.iloc[test_index]
        clf.fit(X_train, y_train)
        clf.score(X_test, y_test)

второй путь:

cross_val_score(clf, X, y, cv=2)

Кажется, что 2 способа делают одно и то же, а второй короче (одна строка).

Чего мне не хватает?

Что такое различия и преимущества или недостатки для каждого способа?

1 Ответ

2 голосов
/ 30 марта 2020

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

clf.score находится в цикле; следовательно, после выполнения l oop он содержит только счет в последнем сгибе проверки, забывая обо всем, что было сделано ранее в предыдущих k-1 сгибах.

cross_cal_score, с другой стороны , возвращает счет из всех k сгибов. Как правило, это предпочтительнее, но в нем отсутствует опция shuffle (такая перетасовка всегда рекомендуется), поэтому сначала вам необходимо вручную перетасовать данные, как показано здесь , или использовать их с cv=KFold(n_splits=k, shuffle=True).

Недостатком метода for l oop + kfold является то, что он запускается последовательно, в то время как процедура CV в cross_val_score может распараллеливаться в нескольких ядрах с аргументом n_jobs.

Ограничением cross_val_score является то, что его нельзя использовать с несколькими метриками, но даже в этом случае вы можете использовать cross_validate, как показано в этой теме - не обязательно использовать for + kfold.

Использование kfold в for l oop дает дополнительную гибкость для случаев, когда ни cross_val_score, ни cross_validate не может быть адекватным, например использовать оболочку scikit-learn для Keras, в то же время получая все метрики, возвращаемые родными Keras во время обучения, как показано здесь ; или если вы хотите постоянно хранить различные сгибы в отдельных переменных / файлах, как показано здесь .

Короче:

  • , если вы просто хотите получить оценки для одного показателя c придерживайтесь cross_val_score (сначала перемешайте и распараллеливайте).
  • , если вы хотите использовать несколько показателей, используйте cross_validate (снова сначала перемешайте и распараллелите).
  • если вам нужна более высокая степень контроля или мониторинга всего процесса CV, вернитесь к использованию kfold в for l oop соответственно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...