Разница между склеарном KFold с использованием шаффла и без него - PullRequest
0 голосов
/ 03 марта 2020

Я работаю с KFlold, используя sklearn версии 0.22. У него есть параметр shuffle. В соответствии с документацией

shuffle boolean, опционально: следует ли перемешивать данные перед разбиением на партии.

Я провел простое сравнение использования KFold с shuffle, установленным на False (по умолчанию) и True:

import numpy as np
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import StratifiedKFold, KFold, RepeatedKFold, RepeatedStratifiedKFold
from sklearn import metrics

X, y = load_digits(return_X_y=True)
def run_nfold(X,y, classifier, scorer, cv,  n_repeats):
    results = []
    for n in range(n_repeats):
        for train_index, test_index in cv.split(X, y):
            x_train, y_train = X[train_index], y[train_index]
            x_test, y_test = X[test_index], y[test_index]
            classifier.fit(x_train, y_train)
            results.append(scorer(y_test, classifier.predict(x_test)))    
    return results

classifier = SGDClassifier(loss='hinge', penalty='elasticnet',  fit_intercept=True)
scorer = metrics.accuracy_score
n_splits = 5
kf = KFold(n_splits=n_splits)
results_kf = run_nfold(X,y, classifier, scorer, kf, 10)
print('KFold mean = ', np.mean(results_kf))

kf_shuffle = KFold(n_splits=n_splits, shuffle=True, random_state = 11)
results_kf_shuffle = run_nfold(X,y, classifier, scorer, kf_shuffle, 10)
print('KFold Shuffled mean = ', np.mean(results_kf_shuffle))

производит

KFold mean =  0.9119255648406066
KFold Shuffled mean =  0.9505304859176724

Использование теста Колмогорова-Смирнова:

print ('Compare KFold with KFold shuffled results')
ks_2samp(results_kf, results_kf_shuffle)

показывает значение по умолчанию без тасования KFold дает статистически значимые результаты ниже, чем с тасованным KFold:

Compare KFold with KFold shuffled results
Ks_2sampResult(statistic=0.66, pvalue=1.3182765881237494e-10)

Я не понимаю разницы между результатами тасования и не тасования, почему это так сильно меняет распределение выхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...