Подтвердить что ты не робот

Какая разница между KFold и ShuffleSplit CV?

Кажется, что KFold генерирует одинаковые значения каждый раз, когда объект итерируется, а Shuffle Split каждый раз генерирует разные индексы. Это верно? Если да, то каковы применения для одного над другим?

cv = cross_validation.KFold(10, n_folds=2,shuffle=True,random_state=None)
cv2 = cross_validation.ShuffleSplit(10,n_iter=2,test_size=0.5)
print(list(iter(cv)))
print(list(iter(cv)))
print(list(iter(cv2)))
print(list(iter(cv2)))

Устанавливает следующий вывод:

[(array([1, 3, 5, 8, 9]), array([0, 2, 4, 6, 7])), (array([0, 2, 4, 6, 7]), array([1, 3, 5, 8, 9]))]                                     
[(array([1, 3, 5, 8, 9]), array([0, 2, 4, 6, 7])), (array([0, 2, 4, 6, 7]), array([1, 3, 5, 8, 9]))]                                     
[(array([4, 6, 3, 2, 7]), array([8, 1, 9, 0, 5])), (array([3, 6, 7, 0, 5]), array([9, 1, 8, 4, 2]))]                                     
[(array([3, 0, 2, 1, 7]), array([5, 6, 9, 4, 8])), (array([0, 7, 1, 3, 8]), array([6, 2, 5, 4, 9]))]    
4b9b3361

Ответ 1

Разница в выводах KFold и ShuffleSplit

KFold разделит ваш набор данных на заданное число сгибов, и каждый образец должен быть в одном и только в один раз. Сгиб - это подмножество вашего набора данных.

ShuffleSplit будет случайным образом пробовать весь ваш набор данных во время каждой итерации, чтобы создать набор тренировок и тестовый набор. Параметры test_size и train_size определяют, насколько большой набор тестов и учебных тестов должен быть для каждой итерации. Поскольку вы отбираете выборку из всего набора данных во время каждой итерации, значения, выбранные во время одной итерации, могут быть снова выбраны во время другой итерации.

Резюме: ShuffleSplit работает итеративно, KFold просто делит набор данных на k сгибов.

Разница при выполнении проверки

В KFold во время каждого раунда вы будете использовать одну смену в качестве набора тестов и всех оставшихся сгибов в качестве вашего набора упражнений. Однако в ShuffleSplit во время каждого раунда n вы должны использовать только набор тренировок и тестов с итерацией n. По мере роста вашего набора данных увеличивается время проверки, что делает shufflesplits более привлекательным. Если вы можете обучить свой алгоритм с определенным процентом ваших данных, а не использовать все складки k-1, ShuffleSplit является привлекательным вариантом.