Ансамбль

Машинное обучение с PySpark

Andrew Collier

Data Scientist, Fathom Data

Что такое ансамбль?

Это набор моделей.

Набор однородных моделей

Мудрость толпы — коллективное мнение группы точнее мнения одного эксперта.

Машинное обучение с PySpark

Разнообразие в ансамбле

 

 

 

Разнообразие и независимость важны, потому что лучшие коллективные решения рождаются из разногласий и споров, а не из консенсуса или компромисса.

― Джеймс Шуровьески, «Мудрость толпы»

Машинное обучение с PySpark

Random Forest

Random Forest — ансамбль деревьев решений

Обеспечение разнообразия моделей:

  • каждое дерево обучается на случайном подмножестве данных
  • для разбиения в каждом узле используется случайное подмножество признаков

В лесу не должно быть двух одинаковых деревьев.

Набор деревьев

Машинное обучение с PySpark

Создание леса деревьев

Возвращаемся к данным об автомобилях: произведён в США (0.0) или нет (1.0).

Создайте классификатор Random Forest.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Обучите модель на тренировочных данных.

forest = forest.fit(cars_train)
Машинное обучение с PySpark

Просмотр деревьев

Как получить доступ к деревьям внутри леса?

forest.trees
[DecisionTreeClassificationModel (uid=dtc_aa66702a4ce9) of depth 5 with 17 nodes,
 DecisionTreeClassificationModel (uid=dtc_99f7efedafe9) of depth 5 with 31 nodes,
 DecisionTreeClassificationModel (uid=dtc_9306e4a5fa1d) of depth 5 with 21 nodes,
 DecisionTreeClassificationModel (uid=dtc_d643bd48a8dd) of depth 5 with 23 nodes,
 DecisionTreeClassificationModel (uid=dtc_a2d5abd67969) of depth 5 with 27 nodes]

Каждое из них можно использовать для отдельных предсказаний.

Машинное обучение с PySpark

Предсказания отдельных деревьев

Какие предсказания генерирует каждое дерево?

+------+------+------+------+------+-----+
|tree 0|tree 1|tree 2|tree 3|tree 4|label|
+------+------+------+------+------+-----+
|   0.0|   0.0|   0.0|   0.0|   0.0|  0.0| <- perfect agreement
|   1.0|   1.0|   0.0|   1.0|   0.0|  0.0|
|   0.0|   0.0|   0.0|   1.0|   1.0|  1.0|
|   0.0|   0.0|   0.0|   1.0|   0.0|  0.0|
|   0.0|   1.0|   1.0|   1.0|   0.0|  1.0|
|   1.0|   1.0|   0.0|   1.0|   1.0|  1.0|
|   1.0|   1.0|   1.0|   1.0|   1.0|  1.0| <- perfect agreement
+------+------+------+------+------+-----+
Машинное обучение с PySpark

Итоговые предсказания

Метод .transform() генерирует итоговые предсказания.

+-----+----------------------------------------+----------+
|label|probability                             |prediction|
+-----+----------------------------------------+----------+
|0.0  |[0.8,0.2]                               |0.0       |
|0.0  |[0.4,0.6]                               |1.0       |
|1.0  |[0.5333333333333333,0.4666666666666666] |0.0       |
|0.0  |[0.7177777777777778,0.28222222222222226]|0.0       |
|1.0  |[0.39396825396825397,0.606031746031746] |1.0       |
|1.0  |[0.17660818713450294,0.823391812865497] |1.0       |
|1.0  |[0.053968253968253964,0.946031746031746]|1.0       |
+-----+----------------------------------------+----------+
Машинное обучение с PySpark

Важность признаков

Модель использует следующие признаки: cyl, size, mass, length, rpm и consumption.

Какой из них наиболее или наименее важен?

forest.featureImportances
SparseVector(6, {0: 0.0205, 1: 0.2701, 2: 0.108, 3: 0.1895, 4: 0.2939, 5: 0.1181})

Видно, что:

  • rpm — наиболее важный признак
  • cyl — наименее важный.
Машинное обучение с PySpark

Gradient-Boosted Trees

Итерационный алгоритм бустинга:

  1. Постройте дерево решений и добавьте его в ансамбль.
  2. Получите предсказания ансамбля для каждого обучающего примера.
  3. Сравните предсказания с известными метками.
  4. Увеличьте вес примеров с неверными предсказаниями.
  5. Вернитесь к шагу 1.

С каждой итерацией модель улучшается.

Машинное обучение с PySpark

Бустинг деревьев

Создайте классификатор на основе Gradient-Boosted Trees.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Обучите модель на тренировочных данных.

gbt = gbt.fit(cars_train)
Машинное обучение с PySpark

Сравнение деревьев

Сравним три типа древовидных моделей на тестовых данных.

# AUC for Decision Tree
0.5875

# AUC for Random Forest
0.65

# AUC for Gradient-Boosted Tree
0.65

Оба ансамблевых метода превосходят обычное дерево решений.

Машинное обучение с PySpark

Давайте потренируемся!

Машинное обучение с PySpark

Preparing Video For Download...