训练 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?
您需要做的是创建自己的 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)