정규화

PySpark로 하는 Machine Learning

Andrew Collier

Data Scientist, Fathom Data

특성: 소수만 사용

특성이 몇 개뿐인 데이터셋

PySpark로 하는 Machine Learning

특성: 과다함

특성이 매우 많은 데이터셋

PySpark로 하는 Machine Learning

특성: 선택됨

많은 특성 중 선택하기

PySpark로 하는 Machine Learning

손실 함수(복습)

선형 회귀는 MSE를 최소화합니다.

평균제곱오차 손실 함수

PySpark로 하는 Machine Learning

정규화가 포함된 손실 함수

선형 회귀는 MSE를 최소화합니다.

정규화 항이 포함된 평균제곱오차 손실 함수

계수에 의존하는 정규화 항을 추가합니다.

PySpark로 하는 Machine Learning

정규화 항

손실 함수에 추가 정규화 항을 더합니다.

정규화 항은

  • 라쏘 — 계수의 절댓값
  • 릿지 — 계수의 제곱

라쏘와 릿지를 혼합할 수도 있습니다.

정규화 강도는 매개변수 $\lambda$로 결정됩니다:

  • $\lambda = 0$ — 정규화 없음(표준 회귀)
  • $\lambda = \infty$ — 완전 정규화(모든 계수 0)
PySpark로 하는 Machine Learning

자동차 다시 보기

assembler = VectorAssembler(inputCols=[
    'mass', 'cyl', 'type_dummy', 'density_line', 'density_quad', 'density_cube'
], outputCol='features')
cars = assembler.transform(cars)
+-----------------------------------------------------------------------------+-----------+
|features                                                                     |consumption|
+-----------------------------------------------------------------------------+-----------+
|[1451.0,6.0,1.0,0.0,0.0,0.0,0.0,303.8743455497,63.63860639785,13.32745683724]|9.05       |
|[1129.0,4.0,0.0,0.0,1.0,0.0,0.0,244.2137140385,52.82580879050,11.42673778726]|6.53       |
|[1399.0,4.0,0.0,0.0,1.0,0.0,0.0,307.6753903672,67.66557958374,14.88136784335]|7.84       |
|[1147.0,4.0,0.0,1.0,0.0,0.0,0.0,264.1031545014,60.81122599620,14.00212433714]|7.84       |
+-----------------------------------------------------------------------------+-----------+
PySpark로 하는 Machine Learning

자동차: 선형 회귀

훈련 데이터에 (표준) 선형 회귀 모델을 적합합니다.

regression = LinearRegression(labelCol='consumption').fit(cars_train)
# 테스트 데이터 RMSE
0.708699086182001

계수를 확인합니다:

regression.coefficients
DenseVector([-0.012, 0.174, -0.897, -1.445, -0.985, -1.071, -1.335, 0.189, -0.780, 1.160])
PySpark로 하는 Machine Learning

자동차: 릿지 회귀

# alpha = 0 | lambda = 0.1 -> Ridge
ridge = LinearRegression(labelCol='consumption', elasticNetParam=0, regParam=0.1)
ridge.fit(cars_train)
# RMSE
0.724535609745491
# 릿지 계수
DenseVector([ 0.001, 0.137, -0.395, -0.822, -0.450, -0.582, -0.806, 0.008,  0.029, 0.001])
# 선형 회귀 계수
DenseVector([-0.012, 0.174, -0.897, -1.445, -0.985, -1.071, -1.335, 0.189, -0.780, 1.160])
PySpark로 하는 Machine Learning

자동차: 라쏘 회귀

# alpha = 1 | lambda = 0.1 -> Lasso
lasso = LinearRegression(labelCol='consumption', elasticNetParam=1, regParam=0.1)
lasso.fit(cars_train)
# RMSE
0.771988667026998
# 라쏘 계수
DenseVector([   0.0,   0.0,    0.0, -0.056,    0.0,    0.0,    0.0, 0.026,    0.0,   0.0])
# 릿지 계수
DenseVector([ 0.001, 0.137, -0.395, -0.822, -0.450, -0.582, -0.806, 0.008,  0.029, 0.001])
# 선형 회귀 계수
DenseVector([-0.012, 0.174, -0.897, -1.445, -0.985, -1.071, -1.335, 0.189, -0.780, 1.160])
PySpark로 하는 Machine Learning

정규화 → 단순한 모델

PySpark로 하는 Machine Learning

Preparing Video For Download...