Пошук по сітці

Machine Learning з PySpark

Andrew Collier

Data Scientist, Fathom Data

Вибір оптимального значення параметра

Machine Learning з PySpark

Знову про cars (іще раз)

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 з PySpark

Витрата пального з перехопленням

Лінійна регресія з перехопленням. Навчіть на тренувальних даних.

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

Обчисліть RMSE на тестових даних.

evaluator.evaluate(regression.transform(cars_test))
# RMSE для моделі з перехопленням
0.745974203928479
Machine Learning з PySpark

Витрата пального без перехоплення

Лінійна регресія без перехоплення. Навчіть на тренувальних даних.

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

Обчисліть RMSE на тестових даних.

# RMSE для моделі без перехоплення (друга модель)
0.852819012439
# RMSE для моделі з перехопленням    (перша модель)
0.745974203928
Machine Learning з PySpark

Сітка параметрів

from pyspark.ml.tuning import ParamGridBuilder

# Створіть будівник сітки параметрів
params = ParamGridBuilder()

# Додайте точки сітки params = params.addGrid(regression.fitIntercept, [True, False])
# Побудуйте сітку params = params.build()
# Скільки моделей? print('Number of models to be tested: ', len(params))
Number of models to be tested:  2
Machine Learning з PySpark

Пошук по сітці з крос-валідацією

Створіть крос-валідацію і навчіть на тренувальних даних.

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

Яке крос-валідаційне RMSE для кожної моделі?

cv.avgMetrics
[0.800663722151, 0.907977823182]
Machine Learning з PySpark

Найкраща модель і параметри

# Доступ до найкращої моделі
cv.bestModel

Або просто використайте об'єкт крос-валідації.

predictions = cv.transform(cars_test)

Отримайте найкращий параметр.

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

Складніша сітка

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()

Скільки моделей тепер?

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

Знайдіть найкращі параметри!

Machine Learning з PySpark

Preparing Video For Download...