目前,随机森林分类器(来自 Spark ML)已经建立在具有以下分布的不平衡数据集上:
+-------+----------------+
| score | n_observations |
+-------+----------------+
| 0 | 256741 |
| 1 | 13913 |
| 2 | 7632 |
| 3 | 15877 |
| 4 | 3289 |
| 5 | 11515 |
| 6 | 8555 |
| 7 | 2087 |
| 8 | 14226 |
| 9 | 6379 |
+-------+----------------+
作为多类问题的结果,我得到以下概率矩阵。概率列给出了观察被分类为一个类的概率。(这些是来自随机森林模型的标准化 rawPredicitions)。
+--------------------+-------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| observation_number | label_score | prob_0 | prob_1 | prob_2 | prob_3 | prob_4 | prob_5 | prob_6 | prob_7 | prob_8 | prob_9 |
+--------------------+-------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| 0 | 0 | 0,812 | 0,039 | 0,024 | 0,049 | 0,007 | 0,024 | 0,019 | 0,002 | 0,016 | 0,008 |
| 1 | 7 | 0,419 | 0,050 | 0,032 | 0,092 | 0,018 | 0,083 | 0,080 | 0,013 | 0,132 | 0,082 |
| 2 | 0 | 0,862 | 0,027 | 0,017 | 0,043 | 0,004 | 0,016 | 0,015 | 0,001 | 0,009 | 0,006 |
| 3 | 0 | 0,845 | 0,028 | 0,018 | 0,049 | 0,004 | 0,018 | 0,018 | 0,001 | 0,011 | 0,008 |
| 4 | 6 | 0,445 | 0,051 | 0,034 | 0,095 | 0,017 | 0,080 | 0,079 | 0,012 | 0,115 | 0,073 |
+--------------------+-------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
实际预测类高度偏向多数类(0 和 8)。这是因为多数概率用于将类别分配给观察,如下所示。应用欠采样和过采样方法不会提高混淆矩阵输出的准确性。
然而,使用这些预测,AUC 曲线似乎很有希望。(平均 AUC 为 0.74)。请参阅下面每个类别的一对多 AUC 曲线图:
我不确定如何从这些概率中检索最佳类别。查看 AUC 有多种方法可以获得最佳阈值。一个解决方案是乘以先验概率的倒数,而另一个解决方案是拟合线性回归。另一种解决方案可能是本文中解释的成对分析,但是我不确定如何精确地应用那里的算法。通过成对分析逼近多类 ROC
在随机森林(或其他树分类器)的预测概率上获得某个类权重的最简单的 Spark 实现是什么?