【发布时间】:2017-12-09 16:46:43
【问题描述】:
我正在尝试在 python 中执行分层 K 折叠验证,我在文档中阅读了以下内容:
我不确定这意味着什么。有人可以向我解释一下 cross_val_score 何时使用 StratifiedKFold 策略吗?
【问题讨论】:
标签: python scikit-learn cross-validation
我正在尝试在 python 中执行分层 K 折叠验证,我在文档中阅读了以下内容:
我不确定这意味着什么。有人可以向我解释一下 cross_val_score 何时使用 StratifiedKFold 策略吗?
【问题讨论】:
标签: python scikit-learn cross-validation
当您执行交叉折叠验证时,您会将训练集拆分为多个验证集。 StratifiedKFold 确保您的每个验证集都包含来自原始训练集的相同比例的标签。
例如,假设您正在针对垃圾邮件而不是垃圾邮件训练分类器。您的训练集包含 50k 个样本和 10k 个垃圾邮件样本。如果您执行 5 折交叉折叠验证,您会将训练集拆分为 5 个验证,每个验证样本大小为 10k。通过分层,您的每个验证集都将以保持非垃圾邮件与垃圾邮件 4:1 分布的方式进行选择。
编辑:对不起,我误解了你原来的问题。要在下面扩展用户 @unutbu 的 cmets,您需要确认您使用的分类器是基类 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。
【讨论】:
cross_val_score 的第一个参数。在示例中,clf 是估计量。当isinstance(clf, sklearn.base.ClassifierMixin) 时,“估计器派生自 ClassifierMixin”为 True。通过查看type(clf).mro(),您可以查看派生type(clf) 的所有基(即类)。您会看到ClassifierMixin 是那里列出的倒数第二个类。
mro 的更多信息,请参阅this SO question。