Установка оптимальных порогов для мультиклассовой модели случайного леса и gbt в pyspark (ml) на несбалансированном наборе данных - PullRequest
1 голос
/ 14 октября 2019

В настоящее время классификатор случайных лесов (из 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 из модели Random Forest).

+--------------------+-------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| 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 была бы наиболее простой для получения некоторого класса, взвешивающего прогнозируемые вероятности для Случайного леса (или других классификаторов деревьев)?

...