每次使用cross_val_score时如何洗牌?

yal*_*man 1 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])
Run Code Online (Sandbox Code Playgroud)

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

scores = cross_val_score(clf, X_train, y_train, cv=n_folds)
Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

您要做的是创建您自己的 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)
Run Code Online (Sandbox Code Playgroud)

  • 你不是错过了shuffle=True吗? (6认同)