В Spark RandomForestClassificationModel общие вероятности прогнозирования для каждого класса рассчитываются путем суммирования вероятностей для каждого дерева и последующего масштабирования.
Перед пересчетом суммы для каждого класса равныможно прочитать в векторе RawPrediction (и то, что впоследствии масштабируется с вероятностями в векторе вероятность ) в кадре данных, преобразованном моделью.
Однако вероятности вкаждое отдельное дерево вычисляется путем взвешивания каждого класса по количеству правильно назначенных наблюдений из обучающего набора и нормализации.
Используя pySpark, можно ли получить доступ к этим весам, чтобы можно было восстановить эти вероятности для каждого наблюдения, используятолько информация о листовом узле для этого конкретного наблюдения (знание весов и листового узла должно быть достаточно для вычисления вероятностей)? Спасибо!
Также см. this для объяснения того, как работают веса
Ниже приведен код SCALA из реализации вычисления вектора rawPredictions. Кажется, что tree.rootNode.predictImpl(features).impurityStats.stats
- это то, к чему я бы хотел иметь доступ.
override protected def predictRaw(features: Vector): Vector = {
// TODO: When we add a generic Bagging class, handle transform there: SPARK-7128
// Classifies using majority votes.
// Ignore the tree weights since all are 1.0 for now.
val votes = Array.fill[Double](numClasses)(0.0)
_trees.view.foreach { tree =>
val classCounts: Array[Double] = tree.rootNode.predictImpl(features).impurityStats.stats
val total = classCounts.sum
if (total != 0) {
var i = 0
while (i < numClasses) {
votes(i) += classCounts(i) / total
i += 1
}
}
}
Vectors.dense(votes)
}
РЕДАКТИРОВАТЬ: Если доступ к impurityStats невозможен из pySpark, возможно ли извлечь отдельные модели дерева классификации измодель случайного леса для того, чтобы пересчитать эквиваленты impuritySats вручную?
РЕДАКТИРОВАТЬ 2: мне удалось получить статистику примесей, используя обходной путь, представленный здесь Судя по коду Scala и результатам Iполучить от этого обходного пути я должен быть в состоянии получить правильные вероятности просто с помощью статистики примесей из корневого узла в качестве весов. Это правильно?