Python中的分层K折叠

时间:2017-07-05 21:07:35

标签: python scikit-learn cross-validation

我正在尝试在python中执行Stratified K Fold Validation,我在文档中阅读了以下内容:

enter image description here

我不确定这意味着什么。当cross_val_score确实使用StratifiedKFold策略时,有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:2)

当您执行交叉折叠验证时,您将训练集分成多个验证集。 StratifiedKFold确保每个验证集包含与原始训练集相同比例的标签。

例如,假设您正在培训垃圾邮件而非垃圾邮件的分类器。您的训练集包含50k样本和10k个垃圾邮件样本。如果您执行5倍交叉折叠验证,则会将训练集分成5个大小为10k样本的验证。通过分层,您将选择每个验证集,以保持非垃圾邮件4:1分发为垃圾邮件。

编辑:对不起,我误解了你原来的问题。要扩展下面的user @ unutbu注释,您需要确认您使用的分类器是基类ClassifierMixin的子类。您可以使用Method Resolution Order

执行此操作

假设您使用的是分类器KNeighborsClassifier

>>> from sklearn.neighbors import KNeighborsClassifier
>>> clf = KNeighborsClassifier()
>>> type(clf)
<class 'sklearn.neighbors.classification.KNeighborsClassifier'>
>>> type(clf).mro()
[<class 'sklearn.neighbors.classification.KNeighborsClassifier'>, ..., <class 'sklearn.base.ClassifierMixin'>, <type 'object'>]

请注意,解决顺序中的倒数第二个类是ClassifierMixin