在训练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?
答案 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)