gpt4 book ai didi

python - scikit-learn 在多类分类中默认使用 One-Vs-Rest 吗?

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:40 24 4
gpt4 key购买 nike

我正在处理一个多类问题(4 个类),我正在尝试使用 Python 中的 scikit-learn 解决它。

我看到我有三个选择:

  1. 我简单地实例化一个分类器,然后用训练进行拟合并用测试进行评估;

    classifier = sv.LinearSVC(random_state=123)
    classifier.fit(Xtrain, ytrain)
    classifier.score(Xtest, ytest)
  2. 我将实例化的分类器“封装”在 OneVsRest 对象中,生成一个我用于训练和测试的新分类器;

    classifier = OneVsRestClassifier(svm.LinearSVC(random_state=123))
    classifier.fit(Xtrain, ytrain)
    classifier.score(Xtest, ytest)
  3. 我将实例化的分类器“封装”在一个 OneVsOne 对象中,生成一个我用于训练和测试的新分类器。

    classifier = OneVsOneClassifier(svm.LinearSVC(random_state=123))
    classifier.fit(Xtrain, ytrain)
    classifier.score(Xtest, ytest)

我了解 OneVsRest 和 OneVsOne 之间的区别,但我无法理解在第一种情况下我在做什么,因为我没有明确选择这两个选项中的任何一个。在这种情况下,scikit-learn 会做什么?它是否隐含地使用了 OneVsRest?

如能对此事作出任何澄清,我们将不胜感激。

最好的,先生

编辑:澄清一下,我对 SVM 的情况并不特别感兴趣。例如,RandomForest 呢?

最佳答案

更新的答案:正如评论和编辑中所阐明的那样,问题更多是关于 sklearn 的一般设置,而不是关于 LinearSVC 的具体情况,这已得到解释下面。

这里的主要区别在于,您可以使用的一些分类器具有“内置的多类分类支持”,即该算法默认可以区分两个以上的类。例如,随机森林或具有多个输出节点的多层感知器 (MLP)。

在这些情况下,根本不需要 OneVs 对象,因为您已经在解决您的任务。事实上,使用这样的策略甚至可能会降低您的性能,因为您通过让算法仅在单个二进制实例之间做出决定来“隐藏”算法的潜在相关性。

另一方面,SVCLinearSVC 等算法仅支持二元 分类。因此,为了扩展这些类别的(性能良好的)算法,我们不得不依赖于从我们最初的多类分类任务减少到二元分类任务。

据我所知,最完整的概述可以找到here :如果向下滚动一点,您可以看到哪一种算法本质上是多类的,或者默认使用其中一种策略。
请注意,OVO 下列出的所有算法实际上现在都默认采用 OVR 策略!在这方面,这似乎是稍微过时的信息。

初始答案:

这个问题很容易通过查看 the relevant scikit-learn documentation 来回答。 .
通常,对 Stackoverflow 的期望是您至少自己完成了某种形式的研究,因此请考虑先查看现有文档。

multi_class : string, ‘ovr’ or ‘crammer_singer’ (default=’ovr’)

Determines the multi-class strategy if y contains more than two classes. "ovr" trains n_classes one-vs-rest classifiers, while "crammer_singer" optimizes a joint objective over all classes. While crammer_singer is interesting from a theoretical perspective as it is consistent, it is seldom used in practice as it rarely leads to better accuracy and is more expensive to compute. If "crammer_singer" is chosen, the options loss, penalty and dual will be ignored.

所以,很明显,它使用的是一对多。

顺便说一下,“常规”SVC 也是如此。 .

关于python - scikit-learn 在多类分类中默认使用 One-Vs-Rest 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52055722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com