Phân nhóm & Kỹ thuật đặc trưng

Machine Learning với PySpark

Andrew Collier

Data Scientist, Fathom Data

Phân nhóm (Bucketing)

Nhóm các giá trị liên tục vào các khoảng

Machine Learning với PySpark

Phân nhóm chiều cao

Biểu đồ tần suất chiều cao

+------+
|height|
+------+
|  1.42|
|  1.45|
|  1.47|
|  1.50|
|  1.52|
|  1.57|
|  1.60|
|  1.75|
|  1.85|
|  1.88|
+------+
Machine Learning với PySpark

Phân nhóm chiều cao

Biểu đồ tần suất chiều cao với các khoảng

+------+
|height|
+------+
|  1.42|
|  1.45|
|  1.47|
|  1.50|
|  1.52|
|  1.57|
|  1.60|
|  1.75|
|  1.85|
|  1.88|
+------+
Machine Learning với PySpark

Phân nhóm chiều cao

Biểu đồ tần suất chiều cao với khoảng và nhãn

+------+
|height|
+------+
|  1.42|
|  1.45|
|  1.47|
|  1.50|
|  1.52|
|  1.57|
|  1.60|
|  1.75|
|  1.85|
|  1.88|
+------+
Machine Learning với PySpark

Phân nhóm chiều cao

Biểu đồ tần suất chiều cao với khoảng và nhãn

+------+----------+
|height|height_bin|
+------+----------+
|  1.42|     short|
|  1.45|     short|
|  1.47|     short|
|  1.50|     short|
|  1.52|   average|
|  1.57|   average|
|  1.60|   average|
|  1.75|   average|
|  1.85|      tall|
|  1.88|      tall|
+------+----------+
Machine Learning với PySpark

Biểu đồ RPM

Vòng tua (RPM) có các ngưỡng “tự nhiên”:

  • $\text{RPM} < 4500$ — thấp
  • $\text{RPM} > 6000$ — cao
  • còn lại — trung bình.

Biểu đồ tần suất RPM với khoảng và nhãn

Machine Learning với PySpark

Nhóm RPM

from pyspark.ml.feature import Bucketizer

bucketizer = Bucketizer(splits=[3500, 4500, 6000, 6500],
                        inputCol="rpm",
                        outputCol="rpm_bin")

Áp dụng nhóm cho cột rpm.

bucketed = bucketizer.transform(cars)
Machine Learning với PySpark

Nhóm RPM

bucketed.select('rpm', 'rpm_bin').show(5)
+----+-------+
| rpm|rpm_bin|
+----+-------+
|3800|    0.0|
|4500|    1.0|
|5750|    1.0|
|5300|    1.0|
|6200|    2.0|
+----+-------+
bucketed.groupBy('rpm_bin').count().show()
+-------+-----+
|rpm_bin|count|
+-------+-----+
|    0.0|    8| <- thấp
|    1.0|   67| <- trung bình
|    2.0|   17| <- cao
+-------+-----+
Machine Learning với PySpark

Mã hóa one-hot cho nhóm RPM

Các nhóm RPM được mã hóa one-hot thành biến giả.

+-------+-------------+
|rpm_bin|    rpm_dummy|
+-------+-------------+
|    0.0|(2,[0],[1.0])| <- thấp
|    1.0|(2,[1],[1.0])| <- trung bình
|    2.0|    (2,[],[])| <- cao
+-------+-------------+

Nhóm RPM “cao” là mức tham chiếu và không có biến giả.

Machine Learning với PySpark

Mô hình với RPM đã phân nhóm

regression.coefficients
DenseVector([1.3814, 0.1433])
+-------+-------------+
|rpm_bin|    rpm_dummy|
+-------+-------------+
|    0.0|(2,[0],[1.0])| <- thấp
|    1.0|(2,[1],[1.0])| <- trung bình
|    2.0|    (2,[],[])| <- cao
+-------+-------------+
regression.intercept
8.1835

Mức tiêu thụ cho RPM “thấp”:

8.1835 + 1.3814 = 9.5649

Mức tiêu thụ cho RPM “trung bình”:

8.1835 + 0.1433 = 8.3268
Machine Learning với PySpark

Thêm kỹ thuật đặc trưng

Phép toán trên một cột:

  • log()
  • sqrt()
  • pow()

Phép toán trên hai cột:

  • tích
  • tỉ lệ.
Machine Learning với PySpark

Từ Khối lượng & Chiều cao đến BMI

Biểu đồ tần suất chiều cao

Biểu đồ tần suất khối lượng

Machine Learning với PySpark

Từ Khối lượng & Chiều cao đến BMI

Biểu đồ tần suất BMI

+------+-----+----+
|height| mass| bmi|    bmi = mass / height^2
+------+-----+----+
|  1.52| 77.1|33.2|
|  1.60| 58.1|22.7|
|  1.57|122.0|49.4|
|  1.75| 95.3|31.0|
|  1.80| 99.8|30.7|
|  1.65| 90.7|33.3|
|  1.60| 70.3|27.5|
|  1.78| 81.6|25.8|
|  1.65| 77.1|28.3|
|  1.78|128.0|40.5|
+------+-----+----+
Machine Learning với PySpark

Xây dựng đặc trưng mật độ

cars = cars.withColumn('density_line', cars.mass / cars.length)       # Linear density
cars = cars.withColumn('density_quad', cars.mass / cars.length**2)    # Area density
cars = cars.withColumn('density_cube', cars.mass / cars.length**3)    # Volume density
+------+------+------------+------------+------------+
|  mass|length|density_line|density_quad|density_cube|
+------+------+------------+------------+------------+
|1451.0| 4.775|303.87434554|63.638606397|13.327456837|
|1129.0| 4.623|244.21371403|52.825808790|11.426737787|
|1399.0| 4.547|307.67539036|67.665579583|14.881367843|
+------+------+------------+------------+------------+
Machine Learning với PySpark

Hãy xây dựng thêm đặc trưng!

Machine Learning với PySpark

Preparing Video For Download...