在不平衡数据集上设置pyspark(ml)中的多类随机森林和gbt模型的最佳阈值
目前,已在具有以下分布的不平衡数据集上构建了随机森林分类器(来自Spark ML):在不平衡数据集上设置pyspark(ml)中的多类随机森林和gbt模型的最佳阈值,pyspark,random-forest,decision-tree,apache-spark-ml,adaptive-threshold,Pyspark,Random Forest,Decision Tree,Apache Spark Ml,Adaptive Threshold,目前,已在具有以下分布的不平衡数据集上构建了随机森林分类器(来自Spark ML): +-------+----------------+ | score | n_observations | +-------+----------------+ | 0 | 256741 | | 1 | 13913 | | 2 | 7632 | | 3 | 15877 | | 4 |
+-------+----------------+
| score | n_observations |
+-------+----------------+
| 0 | 256741 |
| 1 | 13913 |
| 2 | 7632 |
| 3 | 15877 |
| 4 | 3289 |
| 5 | 11515 |
| 6 | 8555 |
| 7 | 2087 |
| 8 | 14226 |
| 9 | 6379 |
+-------+----------------+
作为一个多类问题的结果,我得到以下概率矩阵。概率列给出了一个观测被归类为一类的概率。(这些是来自随机森林模型的标准化原始预测)
实际预测类与大多数类(0和8)高度倾斜。这是由于如下所示,多数概率用于将一个类分配给观测值。应用欠采样和过采样方法不会提高混淆矩阵输出的精度
然而,使用这些预测,AUC曲线似乎很有希望。(平均AUC为0.74)。请参见以下每类一对多AUC曲线图:
我不确定如何从这些概率中检索最佳类。从AUC来看,有多种方法可以获得最佳阈值。一个解决方案是乘以先验概率的倒数,而另一个解决方案是拟合线性回归。另一个解决方案可能是本文中解释的成对分析,但是我不确定如何精确地应用该算法
对于随机森林(或其他树分类器)的预测概率,最容易获得某种类权重的Spark实现是什么
+--------------------+-------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| 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 |
+--------------------+-------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+