我正在尝试弄清楚如何进行k折交叉验证。我希望有人能告诉我我的两个打印语句之间的区别。它们给出的数据大不相同,而我以为它们应该是相同的。
##train是我的训练数据,##target是我的目标,我的二元分类。dtc = DecisionTreeClassifier()kf = KFold(n_splits=10)print(cross_val_score(dtc, train, target, cv=kf, scoring='accuracy'))print(cross_val_score(dtc, train, target, cv=10, scoring='accuracy'))
回答:
DecisionTreeClassifier
源自 ClassifierMixin
,正如文档中提到的(强调我的):
当
cv
参数为整数时,cross_val_score
默认使用KFold
或StratifiedKFold
策略,如果估计器源自ClassifierMixin
,则使用后者。
因此,当你传递cv=10
时,你使用的是StratifiedKFold
策略,而当传递cv=kf
时,你使用的是普通的KFold
策略。
在分类中,分层通常试图确保每个测试折叠具有大致相等的类别表示。有关更多信息,请参见理解分层交叉验证在Cross-Validated上的讨论。