통상적으로 모델의 복잡도가 커지면 분산은 커지고 편향은 작아진다. 반대로 모델이 단순해지면 분산은 작아지고 편향은 커진다. 이렇게 분산과 편향은 서로 트레이드 오프 관계에 있다.
★먼저 읽어보면 좋은 글
머신러닝에서 경계해야 할 것 중 하나가 바로 오버피팅이다.
train data에 지나치게 훈련이 되면 과대적합이 발생해 새로운 test data를 잘 예측하지 못하게 된다.
이러한 오버피팅을 방지하기 위한 방법 중 하나가 바로 모델을 규제하는 것이다. 선형 회귀 모델에서는 모델의 가중치를 제한함으로써 규제한다. 규제 방법에는 릿지, 라쏘, 엘라스틱넷 3가지가 있다.
오늘은 그 첫번째인 릿지에 대해 살펴보자.
릿지 회귀의 규제는 L2규제라고도 한다. 가중치의 절대값을 최대한 작게 만들어 모든 특성이 출력에 주는 영향을 최소화하는 방식이다.
위는 릿지 회귀의 비용함수이다. 규제항이 비용함수에 추가되었으며 규제항은 훈련하는 동안에만 비용 함수에 추가 되고 훈련이 끝난 후 모델의 성능을 평가할 때는 규제가 없는 성능 지표로 평가한다.
하이퍼파라미터 α는 모델을 얼마나 규제할지를 조절하는 것으로 α=0이면 선형 회귀와 동일하다. (규제가 없음)
보다시피 알파가 커질수록 회귀모델이 직선에 가까워진다. 알파가 너무 크면 모델이 너무 단순해 과소적합 문제가 발생할 수 있다.
즉, α가 커질수록 모델의 분산은 줄어들고 편향은 커진다.
릿지 회귀는 입력 특성의 스케일에 매우 민감하기 때문에 수행 전에 StandardScaler, RobustScaler 등을 이용해 꼭 스케일링 작업을 해주는 것이 필요하다. (라쏘, 엘라스틱넷도 마찬가지)
전처리를 완료한 heart 데이터로 릿지를 실습해봤다.
적절한 알파값을 찾기 위해 그리드 서치를 사용했다.
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
ridge = Ridge()
params = {'alpha' : [0.5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] }
gridsearch = GridSearchCV(ridge, param_grid = params)
gridsearch.fit(X_train, y_train)
ridge_estimator = gridsearch.best_estimator_
y_pred = ridge_estimator.predict(X_test)
print(gridsearch.best_params_)
print(ridge_estimator.score(X_test, y_test))
>>>{'alpha': 3}
>>>0.5666196928308294
최적의 알파값은 3, R^2 값은 0.56이다.
그러면 규제가 없는 선형회귀 모델과 성능을 비교해보자.
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X_train, y_train)
lin_reg.score(X_test, y_test)
>>>0.5381802453978968
큰 차이는 없지만 릿지가 일반 선형회귀에 비해 성능이 조금 더 나은 것을 확인할 수 있다.
'파이썬 > 파이썬 기초' 카테고리의 다른 글
하이퍼파라미터와 파라미터의 차이 정확히 짚고 넘어가자 (0) | 2021.07.28 |
---|---|
편향(bias) 분산(variance) 트레이드 오프와 MSE (0) | 2021.07.18 |
지도 학습 분류와 회귀의 차이와 성능 평가 지표 (0) | 2021.07.18 |
파이썬 라이브러리 - numpy, pandas, matplotlib 등 기본 라이브러리 개념 (0) | 2021.07.17 |
빅데이터 분석 기사 자격증 파헤치기! 필기, 실기 시험 유형과 응시자격 (0) | 2021.07.17 |