scikit-learn 的 VotingClassifier 中使用的分类器是啥?
Posted
技术标签:
【中文标题】scikit-learn 的 VotingClassifier 中使用的分类器是啥?【英文标题】:What is the classifier used in scikit-learn's VotingClassifier?scikit-learn 的 VotingClassifier 中使用的分类器是什么? 【发布时间】:2019-06-09 13:16:02 【问题描述】:我查看了 scikit-learn 的文档,但我不清楚在 VotingClassifier 的底层使用了哪种分类方法?是逻辑回归、SVM 还是某种树方法?
我对改变底层使用的分类器方法的方法很感兴趣。如果 Scikit-learn 不提供这样的选项,是否有可以轻松与 scikit-learn 集成的 python 包提供这样的功能?
编辑:
我的意思是用于第二级模型的分类器方法。我非常清楚第一级分类器可以是 scikit-learn 支持的任何类型的分类器。
二级分类器使用一级分类器的预测作为输入。所以我的问题是——这个二级分类器使用什么方法?是逻辑回归吗?或者是其他东西?可以改吗?
【问题讨论】:
我在下面回答了你的问题。如果我的回答对您有帮助,请告诉我。 @TimH 谢谢,但不幸的是,你的帖子没有回答我的问题。请查看编辑。 二级分类器是什么意思? 【参考方案1】:一般
VotingClassifier 不限于一种特定的方法/算法。您可以选择多种不同的算法并将它们组合成一个 VotingClassifier。请参阅下面的示例:
iris = datasets.load_iris()
X, y = iris.data[:, 1:3], iris.target
clf1 = LogisticRegression(...)
clf2 = RandomForestClassifier(...)
clf3 = SVC(...)
eclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('svm', clf3)], voting='hard')
在此处阅读有关用法的更多信息:VotingClassifier-Usage。
当涉及到 VotingClassifier 如何“投票”时,您可以指定 voting='hard'
或 voting='soft'
。有关详细信息,请参阅下面的段落。
投票
多数类别标签(多数/硬投票)
在多数投票中,特定样本的预测类别标签 是代表类的大多数(模式)的类标签 每个分类器预测的标签。
例如,如果给定样本的预测是
分类器 1 -> 分类器 1 分类器 2 -> 分类器 1 分类器 3 -> 分类器 2 VotingClassifier(投票='hard')将对样本进行分类 根据多数类标签作为“1 类”。
来源:scikit-learn-majority-class-labels-majority-hard-voting
加权平均概率(软投票)
与多数投票(硬投票)相比,软投票返回的是 类标签作为预测概率之和的 argmax。
可以通过权重为每个分类器分配特定的权重 范围。当提供权重时,预测的类 收集每个分类器的概率,乘以 分类器权重,取平均值。然后派生出最终的类标签 来自具有最高平均概率的类标签。
来源/阅读更多:scikit-learn-weighted-average-probabilities-soft-voting
【讨论】:
感谢您的详细帖子,但不幸的是,它没有回答我的问题。我编辑了 OP 以使我的问题更清楚。【参考方案2】:VotingClassifier 不适合第一级分类器输出的任何元模型。 它只是通过模式(如果投票是硬的)或平均概率(如果投票是软的)聚合第一级中每个分类器的输出。
简单来说,VotingClassifier 不会从第一级分类器中学到任何东西。它只合并单个分类器的输出。
如果您希望元模型更智能,请尝试使用 adaboost、gradientBoosting 模型。
【讨论】:
以上是关于scikit-learn 的 VotingClassifier 中使用的分类器是啥?的主要内容,如果未能解决你的问题,请参考以下文章
[机器学习与scikit-learn-3]:scikit-learn模型地图与模型选择