Ансамбль

Machine Learning з PySpark

Andrew Collier

Data Scientist, Fathom Data

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

Це набір моделей.

Збірка подібних моделей

Мудрість натовпу — колективна думка групи краща за думку одного експерта.

Machine Learning з PySpark

Різноманітність в ансамблі

 

 

 

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

― Джеймс Суровєцький, Мудрість натовпу

Machine Learning з PySpark

Random Forest

Random Forest — ансамбль Decision Trees

Створення різноманітності моделей:

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

Жодні два дерева у лісі не мають бути однаковими.

Набір дерев

Machine Learning з PySpark

Створіть ліс дерев

Повернімося до даних про авто: вироблено в США (0.0) чи ні (1.0).

Створіть класифікатор Random Forest.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Навчіть на тренувальних даних.

forest = forest.fit(cars_train)
Machine Learning з 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]

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

Machine Learning з PySpark

Прогнози окремих дерев

Які прогнози дає кожне дерево?

+------+------+------+------+------+-----+
|tree 0|tree 1|tree 2|tree 3|tree 4|label|
+------+------+------+------+------+-----+
|   0.0|   0.0|   0.0|   0.0|   0.0|  0.0| <- повна згода
|   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| <- повна згода
+------+------+------+------+------+-----+
Machine Learning з 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       |
+-----+----------------------------------------+----------+
Machine Learning з 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 — найменш важлива.
Machine Learning з PySpark

Gradient-Boosted Trees

Ітеративний алгоритм бустингу:

  1. Побудуйте Decision Tree й додайте до ансамблю.
  2. Передбачте мітки для кожного тренувального прикладу з ансамблем.
  3. Порівняйте прогнози з відомими мітками.
  4. Посильте вагу прикладів з хибними прогнозами.
  5. Поверніться до кроку 1.

Модель поліпшується на кожній ітерації.

Machine Learning з PySpark

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

Створіть класифікатор Gradient-Boosted Tree.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Навчіть на тренувальних даних.

gbt = gbt.fit(cars_train)
Machine Learning з PySpark

Порівняння дерев

Порівняймо три типи моделей дерев на тестових даних.

# AUC для Decision Tree
0.5875

# AUC для Random Forest
0.65

# AUC для Gradient-Boosted Tree
0.65

Обидва ансамблеві методи кращі за звичайне Decision Tree.

Machine Learning з PySpark

Ансамблюйте всі моделі!

Machine Learning з PySpark

Preparing Video For Download...