【问题标题】:how does voting work between two Tree-Based classifiers that are combined using hard voting in scikit?在 scikit 中使用硬投票组合的两个基于树的分类器之间的投票如何工作?
【发布时间】:2021-03-11 11:07:56
【问题描述】:

对于分类任务,我使用sklearn VotingClassifier 来集成随机森林和额外树分类器,参数设置为voting='hard'。我不明白它是如何正常工作的,因为两个基于树的模型都已经使用投票技术给出了最终预测。他们如何使用硬投票结合起来工作?另外,如果两个模型之间存在平局? 谁能举例说明一下?

【问题讨论】:

  • 当您阅读 sklearn 文档(请提供链接?)时,它告诉您什么?当你编写代码来测试它时,它教会了你什么?否则,这是not an on-topic question for SO,你不能指望别人为你做你的工作。如果 sklearn 文档缺失或不足,请在 sklearn 上提交 docbug。
  • 可能是我的问题没有解释我的意思。sklearn 结束并没有错。我只是在理解两个分类器特别是基于树的分类器的硬投票的内部工作方面存在问题。
  • 我已经了解了不同的分类器的工作原理,在软投票的情况下,它将检查每个类的概率。在硬投票的情况下,它将获得一个班级的多数票。但是,如果我将随机森林 (RF) 和额外树 (ET) 结合起来,它们的内部工作就像它们通过计算来自多个决策树的投票来给出最终预测。我只是想知道它如何结合使用。我问是否有人用例子教我,比如有 4 个课程,RF 和 ET。两者都有决策树,并且投票是针对特定类别的组合计算?
  • 是的,我已经阅读了 sklearn 的文档,scikit-learn.org/stable/modules/generated/…,以及不同的博客、网站搜索、研究论文,但我的观点仍然是关于两种算法的结合。有很多网站链接,我可以作为新学习者分享,但很难正确找到我的答案。

标签: python machine-learning scikit-learn classification


【解决方案1】:

您可以从投票分类器的源代码中查找。 简而言之,使用两个带有硬投票的分类器没有多大意义。而是使用软投票。

原因是,在硬投票模式中,sklearn VotingClassifier 投票支持市长投票,并且只有在出现平局时才会变得有趣。如果二进制分类中的零与零一样多,则硬投票分类器将投票给 0。

您可以通过查看它执行的代码来简单地测试它:

首先为实验设置数据:

import numpy as np
# create a random int array with values 0 and 1
# with 20 rows (20 predictions) of 10 voters (10 columns)
a = np.random.randint(0, 2, size=(20,10))

# then produce some tie-lines with different combinations
a[0,:] = [0]*5 + [1]*5  # the first 5 predict 0 the next 5 predict 1
a[1,:] = [1]*5 + [0]*5  # vice versa
a[2,:] = [0,1]*5 # the first predicts 0 then 1 follows 0 and 0 follows 1
a[3,:] = [1,0]*5 # the same, just starting with 1

# if you want to check, how many ones you have, do:
a.sum(axis=1)

现在看看,选民代码对此做了什么。硬投票的选民代码是(下面的代码模拟了这种情况,你有同样加权的分类器weights=[1]*10):

np.apply_along_axis(
                lambda x: np.argmax(
                    np.bincount(x, weights=[1.0]*10)),
                axis=1, arr=a)

结果是:

array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1])

您会看到,对于前四个条目(我们手动引入的平局),结果为 0。因此,在平局的情况下,投票分类器将始终选择 0(如果您为每个条目选择相同的权重)分类器)。请注意,权重不仅用于解决平局,因此您可以拥有一个具有另一个分类器的双倍权重的分类器,因此您甚至可以通过这种方式获得与 3 个分类器的平局。但是,只要所有 0 预测分类器的预测权重总和等于所有 1 预测分类器的预测权重总和,投票分类器将预测 0 而不是 1。

以下是相关代码: Sklearn Voting codeDescription of numpy.argmax

【讨论】:

    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多