如何在不为每个单独的类构建分类器的情况下获得所有类的预测概率?

时间:2016-09-28 05:27:11

标签: python machine-learning scikit-learn

鉴于分类问题,有时我们不只是预测一个类,而是需要返回它是一个类的概率。

即。 P(y = 0 | x),P(y = 1 | x),P(y = 2 | x),...,P(y = C | x)

没有建立新的分类器来预测y = 0,y = 1,y = 2 ... y = C.由于训练C分类器(让我们说C = 100)可能会很慢。

可以做些什么呢?什么分类器自然可以轻松地提供所有概率(我知道一个是使用具有100个节点的神经网络)?但如果我使用传统的随机森林,我不能这样做,对吧?我使用Python Scikit-Learn库。

2 个答案:

答案 0 :(得分:2)

如果您需要概率,请查找具有方法的sklearn分类器:predict_proba()

关于多类的Sklearn文档:[http://scikit-learn.org/stable/modules/multiclass.html]

所有scikit-learn分类器都能够进行多类分类。因此,您不需要自己构建100个模型。

以下是按策略分组的scikit-learn支持的分类器摘要:

  • 天生多类:朴素贝叶斯,LDA和QDA,决策树, 随机森林,最近邻居,设置multi_class =' multinomial' 在sklearn.linear_model.LogisticRegression中。
  • 支持多标签:决策树,随机森林,最近邻居,岭回归。
  • One-Vs-One:sklearn.svm.SVC。
  • One-Vs-All:所有线性模型exceptsklearn.svm.SVC。

答案 1 :(得分:0)

随机森林确实为多个类提供P(Y / x)。在多数情况下 P(Y / x)可以取为:

P(Y / x)=投票给树的树数/树木总数。

但是你可以玩这个,例如在一种情况下,如果最高等级有260票,第二等级230票,其他5等等10票,而在另一种情况下,第1类有260票,其他类有40票每个人投票,你对第二种情况的预测比第一种情况更有信心,所以你根据你的用例提出了一个置信度指标。