Классификационная модель PysPark Random Forest - извлечение весов деревьев - PullRequest
0 голосов
/ 11 октября 2019

В 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получить от этого обходного пути я должен быть в состоянии получить правильные вероятности просто с помощью статистики примесей из корневого узла в качестве весов. Это правильно?

...