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

标签 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 库。

最佳答案

如果您想要概率,请查找具有方法的 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 之外的所有线性模型。

关于python - 如何在不为每个类别构建分类器的情况下获得所有类别的预测概率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39738703/

相关文章:

machine-learning - 针对大不平衡数据的机器学习模型建议

python - 自一天 UTC 时区开始以来的秒数

python - 从两个 pandas 系列创建逐元素字典(csv 列作为 DataFrame)

machine-learning - 评估没有标签的测试数据集! - 可以评价吗?

python - 运行 CRFSuite 示例

python - 当我们只向 kmeans 提供单个单词的 tfidf 向量时,kmeans 如何知道如何对文档进行聚类?

python - Postgres/psycopg2 - 插入字符串数组

python - Elastic Beanstalk 无法安装包

python - sklearn 中的 CountVectorizer 仅包含出现次数高于某个最小次数的单词

windows - 通过 Windows 命令行使用 conda 安装 sklearn_pandas