【问题标题】:How do you get a probability of all classes to predict without building a classifier for each single class?如何在不为每个类构建分类器的情况下获得所有类的预测概率?
【发布时间】:2017-02-05 21:56:33
【问题描述】:

给定一个分类问题,有时我们不仅仅预测一个类,还需要返回它是一个类的概率。

即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 库。

【问题讨论】:

  • 您使用的是什么类型的数据?好的、老式的多项式逻辑回归将预测概率。
  • 一般。尽管在我的情况下,数字和图像都混合在一起。除了逻辑回归,还有别的吗?
  • 错了。 Scikit-Learn 的 RandomForestClassifier 具有 predict_proba(X) 函数,可一次性为您提供所有类别的概率分布。

标签: python machine-learning scikit-learn


【解决方案1】:

如果您想要概率,请查找具有方法的 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 中。
  • 支持多标签:决策树、随机森林、最近邻、岭回归。
  • 一对一:sklearn.svm.SVC。
  • One-Vs-All:除 sklearn.svm.SVC 之外的所有线性模型。

【讨论】:

    【解决方案2】:

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

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

    但是你可以玩弄这个,例如,如果最高等级有 260 票,第二等级有 230 票,其他 5 等级有 10 票,在另一种情况下等级 1 有 260 票,其他等级有 40每次投票,与第一种情况相比,您可能对第二种情况的预测更有信心,因此您可以根据您的用例得出一个置信度指标。

    【讨论】:

      猜你喜欢
      • 2017-06-12
      • 2021-02-11
      • 2016-12-04
      • 2021-07-31
      • 2019-08-05
      • 1970-01-01
      • 2020-04-03
      • 2015-11-15
      • 2018-04-19
      相关资源
      最近更新 更多