python - Predict classes or class probabilities?
问题描述
I am currently using H2O for a classification problem dataset. I am testing it out with H2ORandomForestEstimator
in a python 3.6 environment. I noticed the results of the predict method was giving values between 0 to 1(I am assuming this is the probability).
In my data set, the target attribute is numeric i.e. True
values are 1 and False
values are 0. I made sure I converted the type to category for the target attribute, I was still getting the same result.
Then I modified to the code to convert the target column to factor using asfactor()
method on the H2OFrame still, there wasn't any change on the result.
But when I changed the values in the target attribute to True and False for 1 and 0 respectively, I was getting the expected result(i.e) the output was the classification rather than the probability.
- What is the right way to get the classified prediction result?
- If probabilities are the outcomes for numerical target values, then how do I handle it in case of a multiclass classification?
解决方案
原则上和理论上,硬分类和软分类(即分别返回类和概率)是不同的方法,每种方法都有其优点和缺点。例如,从硬分类还是软分类?大利润统一机器:
基于边距的分类器在机器学习和分类问题的统计中都很流行。在众多的分类器中,有些是硬分类器,有些是软分类器。软分类器显式地估计类条件概率,然后根据估计的概率进行分类。相反,硬分类器直接针对分类决策边界而不产生概率估计。这两种分类器基于不同的哲学,各有其优点。
也就是说,在实践中,今天使用的大多数分类器,包括随机森林(我能想到的唯一例外是 SVM 系列)实际上都是软分类器:它们在下面实际产生的是类似概率的度量,随后,结合一个隐式阈值(通常在二进制情况下默认为 0.5),给出一个硬类成员资格,如0/1
or True/False
。
得到分类预测结果的正确方法是什么?
对于初学者来说,从概率到难课总是有可能的,但反之则不然。
一般来说,考虑到你的分类器实际上是一个软True/False
分类器,只得到最后的硬分类(直接处理产生的概率,并且(重要!)明确控制决策阈值应该是这里的首选方式。根据我的经验,这些是新从业者经常忽略的微妙之处;例如,从交叉验证线程减少分类概率阈值中考虑以下内容:
当您为新样本的每个类别输出一个概率时,您的练习的统计部分就结束了。选择一个阈值,超过该阈值将新观察分类为 1 与 0 不再是统计数据的一部分。它是决策组件的一部分。
除了像上面这样的“软”参数(双关语)之外,在某些情况下,您需要直接处理潜在的概率和阈值,即二进制分类中默认阈值 0.5 会导致您误入歧途的情况,尤其是当您的类不平衡;有关这种情况的具体示例,请参阅我在High AUC 但对不平衡数据(以及其中的链接)的错误预测的回答。
老实说,我对你报告的 H2O 的行为感到相当惊讶(我个人没有使用过),即输出的类型受输入表示的影响;情况不应该如此,如果确实如此,我们可能会遇到设计不良的问题。比较例如 scikit-learn 中的随机森林分类器,它包括两种不同的方法,predict
和predict_proba
,分别获得硬分类和潜在概率(并检查文档,很明显,输出predict
是基于概率估计,之前已经计算过)。
如果概率是数值目标值的结果,那么在多类分类的情况下我该如何处理呢?
这里原则上没有什么新东西,除了一个简单的阈值不再有意义。再次,来自predict
scikit-learn 中的 Random Forest 文档:
预测的类别是具有最高平均概率估计的类别
也就是说,对于 3 个类别(0, 1, 2)
,您会得到一个估计值[p0, p1, p2]
(根据概率规则,元素总和为 1),并且预测的类别是概率最高的类别,例如 的情况下的类别 #1 [0.12, 0.60, 0.28]
。这是一个具有 3 类 iris 数据集的可重现示例(用于 GBM 算法和 R,但基本原理相同)。
推荐阅读
- ios - 无法在 Xcode 中归档应用以供提交
- seo - 仅允许 Googlebot 将所有内容编入索引
- javascript - 从节点服务器检索值后在 Pug(Jade) 中发出警报
- java - 自定义 Spring Boot 启动器中是否可以有默认的 application.yml?
- angular - Angular - Jasmine - 如何测试间隔内的动作
- spreadsheet - Google Docs - 将日期转换为一年中的某一天
- postgresql - 如何使用 PostgreSQL 中的 SQLAlchemy 可重复地查询随机行?
- firebase - 群组的 Firebase 存储安全规则
- reactjs - 当我更新 MERN 堆栈中的记录时,它会删除对象
- php - 从 YAML 文件加载自定义配置块