在我正在进行的一个项目中,RandomForest为我提供了1级的准确结果,Gradient Boosting Classifier给出了0级的准确结果。我想使用它们两者,即两种分类器中最好的。是否可以在Python Sklearn中使用。我尝试使用Voting Classifier(不同重量的软选项),但它对我的原因没有多大帮助。
详细说明这就是问题,当我在测试集上使用RandomForest
分类器时(对于二进制分类任务),这就是混淆矩阵 -
array([[5230, 7656],
[ 683, **3340**]], dtype=int64)
并且,当我在相同的测试数据上使用GradientBoostingClassifier
时,这就是我得到的混淆矩阵 -
array([[**11404**, 1482],
[ 2183, 1840]], dtype=int64)
可以看出,RF正确地预测了1级(3340),而GBM正确地预测了0级(11404)。如何在某种集成方法中使用这两个分类器,以便我可以将RF用于Class 1,将GBM用于0级?
有人可以帮我吗?
干杯!
答案 0 :(得分:0)
如果查看混淆矩阵的列,您会发现一种方法偏向于第1类('GradientBoostingClassifier'),而另一种方法偏向于第2类(RandomForest
)。< / p>
您还应该意识到,您使用的两种方法都是整体方法。
为了更好地理解这个问题,假设你有method 1
预测第1类作为输出,无论输入如何,method 2
预测第2类作为输出而不管输入如何。现在尝试计算这两种方法的混淆矩阵。对于method 1
,它看起来像:
array([[12886, 0],
[ 4023, 0]], dtype=int64)
对于`方法2:
array([[0, 12886],
[0, 4023]], dtype=int64)
您还应该熟悉precision and recall。
所以我说的是,你所使用的这两种方法中没有一种真的擅长于一个类。他们只是偏向于一个阶级,其他阶级的假阳性和假阴性的成本。这两种方法的集合可能会提高您的表现,但它无法满足您的要求。
你要问的基本上是:如果输入是1级,则使用方法1;如果输入是2级,则使用方法2.现在考虑一下,如果你知道你的输入属于哪个类,你就不会申请任何这些分类方法都可以吗? ;)
编辑:如果要对两种方法进行整体合并,可以使用方法的估计概率。重要的是要记住,在这两种方法的情况下,给定的概率是估计,因为没有一种方法是概率方法。
假设输入X
成为类y
成员的概率(由方法m
估算)写为:P(y|X, m)
。然后你可以:
log(P(0|X)) = \sum{m \in M} log(P(0|X, m))
log(P(1|X)) = \sum{m \in M} log(P(1|X, m))
其中M
是池中所有模型的集合。当然,如果出于某种原因,您可以相信一种方法而不是另一种方法,则可以计算日志的加权和。