使用cross_val_score时如何每次打乱数据?

问题描述 投票:0回答:1

训练 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?

python scikit-learn cross-validation
1个回答
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=True, random_state=n)
     scores = cross_val_score(clf, X_train, y_train, cv=strat_k_fold)
© www.soinside.com 2019 - 2024. All rights reserved.