그리드 서치

PySpark로 하는 Machine Learning

Andrew Collier

Data Scientist, Fathom Data

최적 파라미터 값 선택

PySpark로 하는 Machine Learning

자동차 데이터 재방문

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|
+------+---+-----------+
PySpark로 하는 Machine Learning

절편 포함 연비 예측

절편이 있는 선형회귀. 학습 데이터에 적합합니다.

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

테스트 데이터의 RMSE를 계산하세요.

evaluator.evaluate(regression.transform(cars_test))
# RMSE for model with an intercept
0.745974203928479
PySpark로 하는 Machine Learning

절편 미포함 연비 예측

절편이 없는 선형회귀. 학습 데이터에 적합합니다.

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

테스트 데이터의 RMSE를 계산하세요.

# RMSE for model without an intercept (second model)
0.852819012439
# RMSE for model with an intercept    (first model)
0.745974203928
PySpark로 하는 Machine Learning

파라미터 그리드

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
PySpark로 하는 Machine Learning

교차 검증이 있는 그리드 서치

교차 검증기를 생성하고 학습 데이터에 적합합니다.

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

각 모델의 교차 검증 RMSE는 얼마인가요?

cv.avgMetrics
[0.800663722151, 0.907977823182]
PySpark로 하는 Machine Learning

최적 모델과 파라미터

# Access the best model
cv.bestModel

또는 교차 검증기 객체를 바로 사용합니다.

predictions = cv.transform(cars_test)

최적 하이퍼파라미터를 확인합니다.

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

더 복잡한 그리드

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
PySpark로 하는 Machine Learning

최적 파라미터를 찾으세요!

PySpark로 하는 Machine Learning

Preparing Video For Download...