【问题标题】:Stratified K Fold in PythonPython中的分层K折叠
【发布时间】:2017-12-09 16:46:43
【问题描述】:

我正在尝试在 python 中执行分层 K 折叠验证,我在文档中阅读了以下内容:

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

【问题讨论】:

    标签: python scikit-learn cross-validation


    【解决方案1】:

    当您执行交叉折叠验证时,您会将训练集拆分为多个验证集。 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

    【讨论】:

    • 我理解那部分,但我如何让它执行 StratifiedKFold?在文档中,它指出当估计器派生自“ClassifierMixin”时使用 StratifiedKFold 策略。这到底是什么意思?
    • @bugsyb:估计器是传递给cross_val_score 的第一个参数。在示例中,clf 是估计量。当isinstance(clf, sklearn.base.ClassifierMixin) 时,“估计器派生自 ClassifierMixin”为 True。通过查看type(clf).mro(),您可以查看派生type(clf) 的所有基(即类)。您会看到ClassifierMixin 是那里列出的倒数第二个类。
    • 有关“派生”术语的来源的更多信息,请参阅the tutorial。有关mro 的更多信息,请参阅this SO question
    猜你喜欢
    • 2021-01-17
    • 2019-12-25
    • 2022-11-28
    • 2011-07-01
    • 2017-10-02
    • 2015-09-23
    • 2013-05-03
    • 2017-01-11
    • 1970-01-01
    相关资源
    最近更新 更多