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