Как sklearn cross_val_score использует kfold? - PullRequest
3 голосов
/ 25 мая 2019

Я новичок в машинном обучении и пытаюсь понять, cross_val_score использует Kfold для разделения данных на k сгибов.

kf = KFold(n_splits=2)
cv_results =cross_val_score(model, X_train, Y_train, cv=kf)

Я знаю, kfold разбивает данные, но я пытался их распечатать

dataset = [[1,1,1],[2,2,2],[3,3,3],[4,4,4],[5,5,5],[6,6,6],[7,7,7],[8,8,8]]
kf =  KFold(n_splits=2)
print kf

>>> KFold(n_splits=2, random_state=None, shuffle=False)

Это не показывает k сгибов, но тогда как cross_val_score получает все сгибы?

Ответы [ 2 ]

3 голосов
/ 25 мая 2019

Вам нужно позвонить Kf.split(dataset), чтобы фактически разделить данные. Нажмите здесь, чтобы увидеть, как работает KFold

Просто чтобы прояснить, KFold является классом, а не функцией.

kf = KFold(n_splits=2) создает объект KFold,print kf просто распечатает объект класса.

и когда вы вызываете cross_val_score(model, X_train, Y_train, cv=kf), вы передаете объект kf в функцию cross_val_score, где kf.split(X_train) будет вызываться для разделения X_train на 2складки.Y_train также будет разделен аналогично.

0 голосов
/ 25 мая 2019

Попробуйте это

kf = KFold(n_splits=2)
generator = kf.split(dataset)
for train, test in generator:
    print "*" * 20
    print "Training Data:"
    for i in train:
        print dataset[i]
    print "Test Data:"
    for j in test:
        print dataset[j]

kf.split (набор данных) возвращает генератор. Итерация по генератору дала бы вам все сгибы

...