1

目前,随机森林分类器(来自 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 曲线(一对多)

我不确定如何从这些概率中检索最佳类别。查看 AUC 有多种方法可以获得最佳阈值。一个解决方案是乘以先验概率的倒数,而另一个解决方案是拟合线性回归。另一种解决方案可能是本文中解释的成对分析,但是我不确定如何精确地应用那里的算法。通过成对分析逼近多类 ROC

在随机森林(或其他树分类器)的预测概率上获得某个类权重的最简单的 Spark 实现是什么?

4

0 回答 0