Tìm kiếm theo lưới

Machine Learning với PySpark

Andrew Collier

Data Scientist, Fathom Data

Chọn giá trị tham số tối ưu

Machine Learning với PySpark

Quay lại dữ liệu ô tô (lần nữa)

cars.select('mass', 'cyl', 'consumption').show(5)
+------+---+-----------+
|  mass|cyl|consumption|
+------+---+-----------+
|1451.0|  6|       9.05|
|1129.0|  4|       6.53|
|1399.0|  4|       7.84|
|1147.0|  4|       7.84|
|1111.0|  4|       9.05|
+------+---+-----------+
Machine Learning với PySpark

Tiêu thụ nhiên liệu có hệ số chặn

Hồi quy tuyến tính có hệ số chặn. Fit vào dữ liệu huấn luyện.

regression = LinearRegression(labelCol='consumption', fitIntercept=True)
regression = regression.fit(cars_train)

Tính RMSE trên dữ liệu kiểm tra.

evaluator.evaluate(regression.transform(cars_test))
# RMSE cho mô hình có hệ số chặn
0.745974203928479
Machine Learning với PySpark

Tiêu thụ nhiên liệu không có hệ số chặn

Hồi quy tuyến tính không có hệ số chặn. Fit vào dữ liệu huấn luyện.

regression = LinearRegression(labelCol='consumption', fitIntercept=False)
regression = regression.fit(cars_train)

Tính RMSE trên dữ liệu kiểm tra.

# RMSE cho mô hình không có hệ số chặn (mô hình 2)
0.852819012439
# RMSE cho mô hình có hệ số chặn    (mô hình 1)
0.745974203928
Machine Learning với PySpark

Lưới tham số

from pyspark.ml.tuning import ParamGridBuilder

# Create a parameter grid builder
params = ParamGridBuilder()

# Add grid points params = params.addGrid(regression.fitIntercept, [True, False])
# Construct the grid params = params.build()
# How many models? print('Number of models to be tested: ', len(params))
Number of models to be tested:  2
Machine Learning với PySpark

Tìm kiếm lưới với kiểm định chéo

Tạo bộ kiểm định chéo và fit vào dữ liệu huấn luyện.

cv = CrossValidator(estimator=regression,
                    estimatorParamMaps=params,
                    evaluator=evaluator)
cv = cv.setNumFolds(10).setSeed(13).fit(cars_train)

RMSE kiểm định chéo cho mỗi mô hình là bao nhiêu?

cv.avgMetrics
[0.800663722151, 0.907977823182]
Machine Learning với PySpark

Mô hình & tham số tốt nhất

# Access the best model
cv.bestModel

Hoặc dùng trực tiếp đối tượng cross-validator.

predictions = cv.transform(cars_test)

Lấy tham số tốt nhất.

cv.bestModel.explainParam('fitIntercept')
'fitIntercept: whether to fit an intercept term (default: True, current: True)'
Machine Learning với PySpark

Lưới phức tạp hơn

params = ParamGridBuilder() \
            .addGrid(regression.fitIntercept, [True, False]) \

.addGrid(regression.regParam, [0.001, 0.01, 0.1, 1, 10]) \
.addGrid(regression.elasticNetParam, [0, 0.25, 0.5, 0.75, 1]) \ .build()

Giờ có bao nhiêu mô hình?

print ('Number of models to be tested: ', len(params))
Number of models to be tested:  50
Machine Learning với PySpark

Tìm tham số tốt nhất!

Machine Learning với PySpark

Preparing Video For Download...