不同指标的交叉验证 - Sklearn

数据挖掘 Python scikit-学习 交叉验证
2022-03-12 07:30:21

当我使用 Python 的 Sklearn 进行交叉验证并获取不同指标(准确度、精度等)的分数时,如下所示:

result_accuracy = cross_val_score(classifier, X_train, y_train, scoring='accuracy', cv=10)
result_precision = cross_val_score(classifier, X_train, y_train, scoring='precision', cv=10)
result_recall = cross_val_score(classifier, X_train, y_train, scoring='recall', cv=10)
result_f1 = cross_val_score(classifier, X_train, y_train, scoring='f1', cv=10)

每次针对不同指标执行的cross_val_score()函数是否都会产生相同的 10 倍训练数据?如果没有,我是否需要先使用 KFold 制作一般的 10 折,如下所示:

seed = 7
kf = KFold(n_splits=10, random_state=seed)

result_accuracy = cross_val_score(classifier, X_train, y_train, scoring='accuracy', cv=kf)
result_precision = cross_val_score(classifier, X_train, y_train, scoring='precision', cv=kf)
result_recall = cross_val_score(classifier, X_train, y_train, scoring='recall', cv=kf)
result_f1 = cross_val_score(classifier, X_train, y_train, scoring='f1', cv=kf)
1个回答

如果您想在交叉验证中打乱您的数据,这才真正重要。cross_val_score两者的默认值KFold是不洗牌。

如果您确实想改组您的第二个选项,如果您想确保您正在比较数据上相同拆分的分数,则最好。

请记住,在 defaultKFold(shuffle=False)中,因此如果您想随机播放数据,请确保将 Kfold 设置为:

kf = KFold(n_splits=10, shuffle=True, random_state=seed)