Rah*_*hul 10 python classification machine-learning random-forest h2o
我目前正在使用H2O作为分类问题数据集.我H2ORandomForestEstimator在python 3.6环境中测试它.我注意到预测方法的结果给出了0到1之间的值(我假设这是概率).
在我的数据集中,目标属性是数字,即True值为1,False值为0.我确保将类型转换为目标属性的类别,我仍然得到相同的结果.
然后我修改了代码,将目标列转换为asfactor()H2OFrame上的因子使用方法,结果没有任何变化.
但是当我将目标属性中的值分别更改为1和0时的True和False时,我得到了预期结果(即)输出是分类而不是概率.
des*_*aut 12
原则上和理论上,硬分类和软分类(即分别返回类和概率)是不同的方法,每个方法都有其自身的优点和缺点.例如,从纸张硬或软分类中考虑以下内容?大利润统一机器:
基于边距的分类器在机器学习和分类问题的统计中都很流行.在众多分类器中,有些是硬分类器,有些是软分类器.软分类器明确地估计类条件概率,然后基于估计的概率执行分类.相反,硬分类器直接以分类决策边界为目标而不产生概率估计.这两种类型的分类器基于不同的哲学,每种都有自己的优点.
也就是说,在实践中,今天使用的大多数分类器,包括随机森林(我能想到的唯一例外是SVM系列)实际上是软分类器:它们实际上在下面生成的是类似概率的度量,随后,结合隐式阈值(在二进制情况下通常默认为0.5),给出类似0/1或的硬类成员资格True/False.
获得分类预测结果的正确方法是什么?
对于初学者来说,总是可以从概率转向艰难的阶级,但事实恰恰相反.
一般来说,鉴于你的分类器实际上是一个软分类器,只需要结束硬分类(True/False)给过程带来"黑盒子"的味道,这原则上应该是不合需要的; 直接处理产生的概率,并且(重要!)明确地控制决策阈值应该是这里的优选方式.根据我的经验,这些是新的从业者经常失去的微妙之处; 从交叉验证线程分类概率阈值考虑例如以下内容:
当您为新样本的每个类输出概率时,练习的统计部分结束.选择一个阈值,超过该阈值,您将新观察分类为1对0不再是统计数据的一部分.它是决策部分的一部分.
除了如上所述的"软"参数(双关语)之外,还有一些情况需要直接处理基础概率和阈值,即二进制分类中默认阈值为0.5的情况会导致您误入歧途,最明显的是当您的课程是不平衡的; 看看我在LightGBM中的答案- 高AUC但是对于这种情况的具体例子,对不平衡数据(以及其中的链接)的不良预测.
说实话,我对你报告的H2O的行为感到惊讶(我没有亲自使用它),即输出的类型受输入表示的影响; 情况应该不是这样,如果确实如此,我们可能会遇到设计不良的问题.比较scikit-learn中的随机森林分类器,其中包括两种不同的方法,predict并且predict_proba,为了分别得到硬分类和基础概率(并检查文档,很明显输出predict是基于概率估计,已经计算过的).
如果概率是数值目标值的结果,那么在多类分类的情况下如何处理它?
除了简单的门槛不再有意义之外,原则上没有任何新的东西; 再次,来自predictscikit-learn中的随机森林文档:
预测类是具有最高平均概率估计的类
也就是说,对于3个类(0, 1, 2),你得到一个估计[p0, p1, p2](根据概率规则总计为1的元素),并且预测的类是具有最高概率的类,例如对于情况的类#1 [0.12, 0.60, 0.28].这是一个可重复的示例,其中包含3级虹膜数据集(它用于GBM算法和R中,但基本原理相同).
添加到@desertnaut 的答案中,并且由于您将此问题标记为 Python,因此您将如何处理问题的最后一部分:
如果概率是数值目标值的结果,那么在多类分类的情况下如何处理它?
y_pred = np.argmax(prob, axis=1)
Run Code Online (Sandbox Code Playgroud)
这会将一(num_examples, n_classes)组概率值转换为一(num_examples, )组预测类。
| 归档时间: |
|
| 查看次数: |
4171 次 |
| 最近记录: |