我目前正在将H2O用于分类问题数据集。我正在H2ORandomForestEstimatorpython 3.6环境中对其进行测试。我注意到预测方法的结果是给出0到1之间的值(我假设这是概率)。
H2ORandomForestEstimator
在我的数据集中,目标属性是数字,即True值是1且False值是0。我确保将类型转换为目标属性的类别,但仍得到相同的结果。
True
False
然后我修改了代码,asfactor()仍然使用H2OFrame上的方法将目标列转换为因数,结果没有任何变化。
asfactor()
但是,当我分别将target属性中的值分别更改为1和0的True和False时,我得到了预期的结果(即输出)是分类而不是概率。
从原理和理论上讲,硬分类和软分类(即分别返回 类 和 概率 )是不同的方法,每种方法都有其优点和缺点。例如,从论文硬分类还是软分类中考虑以下内容?大利润统一机:
基于边距的分类器已在机器学习和分类问题的统计中广受欢迎。在众多分类器中,有些是 硬 分类器,而有些是 软 分类器。软分类器显式估计类的条件概率,然后根据估计的概率执行分类。相反,硬分类器直接针对分类决策边界,而不产生概率估计。这两种类型的分类器基于不同的哲学,每种都有其优点。
也就是说,实际上,当今使用的大多数分类器,包括随机森林(我能想到的唯一例外是SVM系列)实际上都是 软 分类器:它们在底层实际产生的是类似于概率的量度,其后,结合隐式 阈值 (在二进制情况下,默认情况下通常为默认 值 0.5)会产生硬类成员资格,例如0/1或True/False。
0/1
True/False
什么是获得分类预测结果的正确方法?
对于初学者来说,从概率到困难的类别总是可能的,但事实并非如此。
一般而言,考虑到您的分类器实际上是一个 软 分类器,仅对最终的硬分类器(True/False)进行分类就可以给该过程带来“黑匣子”味道,这在原则上应该是不受欢迎的;直接处理产生的概率,并且(重要!)明确控制 决策阈值 应该是此处的首选方法。根据我的经验,这些都是新手往往会迷失的精妙之处。从“交叉验证线程分类”概率阈值中考虑以下内容:
当您为新样本的每个类别输出概率时,练习的统计部分结束。选择一个阈值,将新观察值分类为1 vs. 0不再是 统计信息的 一部分。它是 决策 组件的一部分。
除了上面提到的“软”自变量(非双关语)外,在某些情况下,您 需要 直接处理基础的概率和阈值,即二进制分类中默认阈值0.5会使您误入歧途,尤其是在您的课堂上不平衡 有关此类情况的具体示例,请参见我在高AUC中的答案,但对于不平衡数据(及其中的链接)的错误预测。
老实说,我对您报告的H2O行为感到惊讶(我个人没有使用过),即输出的种类受输入的表示形式影响;事实并非如此,如果确实如此,我们可能会遇到设计不良的问题。比较scikit- learn中的Random Forest分类器,它包括两种不同的方法,predict和predict_proba,分别获得硬分类和潜在概率(并检查文档,很明显,的输出predict基于 概率估计 ,之前已经计算过)。
predict
predict_proba
如果概率是数字目标值的结果,那么在进行多类分类时如何处理?
原则上,这里没有什么新内容,除了简单的阈值不再有意义的事实之外;再次,来自predictscikit- learn中的Random Forest文档:
预测类别是具有最高平均概率估计的类别
也就是说,对于3个类别(0, 1, 2),您将获得的估计值[p0, p1, p2](根据概率规则,元素加总为1),而预测的类别是概率最高的类别,例如,对于,类别为#1 [0.12, 0.60, 0.28]。这是3类虹膜数据集的可重现示例(用于GBM算法和R中,但基本原理相同)。
(0, 1, 2)
[p0, p1, p2]
[0.12, 0.60, 0.28]