Machine Learning với PySpark
Andrew Collier
Data Scientist, Fathom Data
Đó là một tập hợp mô hình.
Sự thông thái của đám đông — ý kiến tập thể thường tốt hơn ý kiến của một chuyên gia đơn lẻ.
Đa dạng và độc lập rất quan trọng vì quyết định tập thể tốt nhất là sản phẩm của bất đồng và tranh luận, không phải đồng thuận hay thỏa hiệp.
― James Surowiecki, The Wisdom of Crowds
Random Forest — một tập hợp các Cây quyết định
Tạo đa dạng mô hình:
Không cây nào trong rừng giống hệt nhau.

Quay lại dữ liệu ô tô: sản xuất tại Mỹ (0.0) hay không (1.0).
Tạo bộ phân loại Rừng ngẫu nhiên.
from pyspark.ml.classification import RandomForestClassifier
forest = RandomForestClassifier(numTrees=5)
Huấn luyện trên dữ liệu train.
forest = forest.fit(cars_train)
Cách truy cập các cây trong rừng?
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]
Mỗi cây có thể dùng để dự đoán riêng lẻ.
Mỗi cây tạo ra dự đoán gì?
+------+------+------+------+------+-----+
|tree 0|tree 1|tree 2|tree 3|tree 4|label|
+------+------+------+------+------+-----+
| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| <- hoàn toàn đồng thuận
| 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| <- hoàn toàn đồng thuận
+------+------+------+------+------+-----+
Dùng phương thức .transform() để tạo dự đoán đồng thuận.
+-----+----------------------------------------+----------+
|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 |
+-----+----------------------------------------+----------+
Mô hình dùng các đặc trưng: cyl, size, mass, length, rpm và consumption.
Đặc trưng nào quan trọng nhất/ít nhất?
forest.featureImportances
SparseVector(6, {0: 0.0205, 1: 0.2701, 2: 0.108, 3: 0.1895, 4: 0.2939, 5: 0.1181})
Trông như:
rpm quan trọng nhấtcyl ít quan trọng nhất.Thuật toán boosting lặp:
Mô hình cải thiện qua mỗi vòng lặp.
Tạo bộ phân loại Gradient-Boosted Tree.
from pyspark.ml.classification import GBTClassifier
gbt = GBTClassifier(maxIter=10)
Huấn luyện trên dữ liệu train.
gbt = gbt.fit(cars_train)
Hãy so sánh ba loại mô hình cây trên dữ liệu kiểm tra.
# AUC cho Cây quyết định
0.5875
# AUC cho Rừng ngẫu nhiên
0.65
# AUC cho Cây tăng cường độ dốc
0.65
Cả hai phương pháp tập hợp đều tốt hơn Cây quyết định đơn lẻ.
Machine Learning với PySpark