如何在每次使用cross_val_score时混洗数据?

时间:2018-04-30 18:25:22

标签: python scikit-learn cross-validation

在训练Ridge分类器时,我能够执行10次交叉验证,如下所示:

clf = linear_model.RidgeClassifier()
n_folds = 10
scores = cross_val_score(clf, X_train, y_train, cv=n_folds)
scores
array([0.83236107, 0.83937346, 0.84490172, 0.82985258, 0.84336609,
       0.83753071, 0.83753071, 0.84213759, 0.84121622, 0.84398034])

如果我想再次进行10次交叉验证,我会使用:

scores = cross_val_score(clf, X_train, y_train, cv=n_folds)

我最终得到了相同的结果。

因此,似乎两次都以相同的方式分割数据。 有没有办法在每次执行交叉验证时将数据随机分区为n_folds?

1 个答案:

答案 0 :(得分:2)

您要做的是创建自己的Stratified K Folds对象实例,并将其传递给cross_val_score中的cv参数。这样,您可以提供不同的随机种子来分割数据。

from sklearn.model_selection import StratifiedKFold
clf = linear_model.RidgeClassifier()
for n in range(5):
     strat_k_fold = StratifiedKFold(n_splits=10, shuffle=False, random_state=n)
     scores = cross_val_score(clf, X_train, y_train, cv=strat_k_fold)