Деревья решений Spark MLib: Вероятность ярлыков по признакам?

Мне удалось отобразить общие вероятности моих labels , например, после отображения моего дерева решений, у меня есть таблица:

 Total Predictions : 65% impressions 30% clicks 5% conversions 

Но моя проблема – найти вероятности (или подсчитать) с помощью features (по узлу), например:

 if feature1 > 5 if feature2 < 10 Predict Impressions samples : 30 Impressions else feature2 >= 10 Predict Clicks samples : 5 Clicks 

Scikit делает это автоматически, я пытаюсь найти способ сделать это с помощью Spark

One Solution collect form web for “Деревья решений Spark MLib: Вероятность ярлыков по признакам?”

Примечание. Следующее решение предназначено только для Scala. Я не нашел способ сделать это в Python.

Предполагая, что вам просто нужно визуальное представление дерева, как в вашем примере, возможно, одним из вариантов является адаптация метода subtreeToString присутствующего в коде Node.scala на GitHub Spark, для включения вероятностей на каждом разбиении узлов, как в следующем фрагменте:

 def subtreeToString(rootNode: Node, indentFactor: Int = 0): String = { def splitToString(split: Split, left: Boolean): String = { split.featureType match { case Continuous => if (left) { s"(feature ${split.feature} <= ${split.threshold})" } else { s"(feature ${split.feature} > ${split.threshold})" } case Categorical => if (left) { s"(feature ${split.feature} in ${split.categories.mkString("{", ",", "}")})" } else { s"(feature ${split.feature} not in ${split.categories.mkString("{", ",", "}")})" } } } val prefix: String = " " * indentFactor if (rootNode.isLeaf) { prefix + s"Predict: ${rootNode.predict.predict} \n" } else { val prob = rootNode.predict.prob*100D prefix + s"If ${splitToString(rootNode.split.get, left = true)} " + f"(Prob: $prob%04.2f %%)" + "\n" + subtreeToString(rootNode.leftNode.get, indentFactor + 1) + prefix + s"Else ${splitToString(rootNode.split.get, left = false)} " + f"(Prob: ${100-prob}%04.2f %%)" + "\n" + subtreeToString(rootNode.rightNode.get, indentFactor + 1) } } 

Я тестировал его на модели, которую я запускал в наборе данных Iris , и у меня есть следующий результат:

 scala> println(subtreeToString(model.topNode)) If (feature 2 <= -0.762712) (Prob: 35.35 %) Predict: 1.0 Else (feature 2 > -0.762712) (Prob: 64.65 %) If (feature 3 <= 0.333333) (Prob: 52.24 %) If (feature 0 <= -0.666667) (Prob: 92.11 %) Predict: 3.0 Else (feature 0 > -0.666667) (Prob: 7.89 %) If (feature 2 <= 0.322034) (Prob: 94.59 %) Predict: 2.0 Else (feature 2 > 0.322034) (Prob: 5.41 %) If (feature 3 <= 0.166667) (Prob: 50.00 %) Predict: 3.0 Else (feature 3 > 0.166667) (Prob: 50.00 %) Predict: 2.0 Else (feature 3 > 0.333333) (Prob: 47.76 %) Predict: 3.0 

Аналогичный подход может быть использован для создания древовидной структуры с этой информацией. Основное различие split.feature , чтобы хранить печатную информацию ( split.feature , split.threshold , predict.prob и т. Д.) В качестве vals и использовать их для построения структуры.

  • импорт pyspark в оболочке python
  • Как остановить искровой поток, когда источник данных закончился
  • Создание бинномозговых гистограмм в Spark
  • Выбор значений из непустых столбцов в элементе данных PySpark DataFrame
  • Как назначить и использовать заголовки столбцов в Spark?
  • К ограничению большого RDD
  • Spark 1.6 Функция поворота DataFrame
  • Правильное чтение типов из файла в PySpark
  •  
    Interesting Posts for Van-Lav

    Извлечение списка амплитуд из * .wav-файла для использования в Python

    Установка локальных переменных в функцию вместо использования глобальных переменных оптимизирует функцию

    Django filter query с полями автоматически вычисляются

    Python получает доступ к списку при сортировке

    Чтение блоков данных из файла в Python

    Скрипт Python использует цикл while для обновления сценариев работы и многопроцессорных задач в очереди

    Результаты для Observer (), по-видимому, не учитывают повышения высоты в PyEphem

    Не удалось установить boto в python3

    Ошибка библиотеки изображений Python – Caught IOError при рендеринге: недостаточно данных

    в которой python web framework (django или django-norel или pyramid) используется, когда MongoDB используется как база данных

    Python – Как удалить / unimport libs был импортирован до

    Как выбрать из нескольких таблиц в одном запросе с помощью Django?

    Использование psycopg2 с Lambda для обновления Redshift (Python)

    2D-массив numpy не дает ошибки при индексировании со строками, содержащими цифры

    Запись списка в файл с помощью Python

    Python - лучший язык программирования в мире.