반응형
Ridge 모델
Ridge(alpha, fit_intercept, normalize, copy_X, max_iter, tol, solver, random_state)
- alpha : 값이 클수록 강력한 정규화(규제) 설정하여 분산을 줄임, 양수로 설정
- fit_intercept : 모형에 상수항 (절편)이 있는가 없는가를 결정하는 인수 (default : True)
- normalize : 매개변수 무시 여부
- copy_X : X의 복사 여부
- max_iter : 계산에 사용할 작업 수
- tol : 정밀도
- solver : 계산에 사용할 알고리즘 (auto, svd, cholesky, lsqr, sparse_cg, sag, saga)
- random_state : 난수 seed 설정
Ridge 예제
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression, Ridge, Lasso
- 현재 필요한 라이브러리 import
# 확장 보스턴 집값
from sklearn.model_selection import train_test_split
import mglearn
X, y = mglearn.datasets.load_extended_boston()
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
- 데이터를 불러오는 과정
- mglearn의 보스턴 집값모델을 불러왔다.
- 해당모델은 학습 세트 정확도에 비해 테스트 세트 정확도가 매우 낮은 '과적합'의 형태를 보인다.
mode_lr = LinearRegression().fit(X_train, y_train)
print("훈련 세트 점수: {:.2f}".format(mode_lr.score(X_train, y_train)))
print("테스트 세트 점수: {:.2f}".format(mode_lr.score(X_test, y_test)))
model_ridge_alpha_01 = Ridge(alpha=0.1).fit(X_train, y_train)
print("훈련 세트 점수: {:.2f}".format(model_ridge_alpha_01.score(X_train, y_train)))
print("테스트 세트 점수: {:.2f}".format(model_ridge_alpha_01.score(X_test, y_test)))
model_ridge = Ridge().fit(X_train, y_train)
print("훈련 세트 점수: {:.2f}".format(model_ridge.score(X_train, y_train)))
print("테스트 세트 점수: {:.2f}".format(model_ridge.score(X_test, y_test)))
model_ridge_alpha_10 = Ridge(alpha=10).fit(X_train, y_train)
print("훈련 세트 점수: {:.2f}".format(model_ridge_alpha_10.score(X_train, y_train)))
print("테스트 세트 점수: {:.2f}".format(model_ridge_alpha_10.score(X_test, y_test)))
==결과==
훈련 세트 점수: 0.95
테스트 세트 점수: 0.61
훈련 세트 점수: 0.93
테스트 세트 점수: 0.77
훈련 세트 점수: 0.89
테스트 세트 점수: 0.75
훈련 세트 점수: 0.79
테스트 세트 점수: 0.64
- alpha값을 높게 줄수록 학습 세트에 대한 정확도는 떨어짐을 알 수 있다. 현 특성들이 훈련세트에 과하게 적용되는 것을 규제했기 때문이다.
- 하지만 너무 과하게 주면 테스트 세트의 점수도 함께 떨어짐을 알 수 있다. 이는 특성들이 과하게 규제되어 과소 적합이 발생한 것이다.
# α 값의 변화에 따른 가중치 (coef_)의 변화
plt.plot(mode_lr.coef_, 'o', label='LinearRegression')
plt.plot(model_ridge_alpha_01.coef_, '^', label='Ridge alpha=0.1')
plt.plot(model_ridge.coef_, 's', label='Ridge alpha=1')
plt.plot(model_ridge_alpha_10.coef_, 'v', label='Ridge alpha=10')
plt.xlabel("Coef list") # 가중치(w) 목록
plt.ylabel("Coef size") # 가중치(w) 값
plt.ylim(-25, 25)
plt.legend()
- 시각화를 해보면 결과를 더 잘 알 수 있다.
- 단순 선형회귀에선 학습 세트에 대해서만 최적화가 되어 있어 각 특성(가중치)의 값들이 많이 흩어져 있다.
- 하지만 Ridge를 적용, alpha값을 늘릴 수록 특성의 값들이 0으로 몰리는 것을 확인할 수 있다.
반응형
'🛠 기타 > Data & AI' 카테고리의 다른 글
단층 퍼셉트론 - 이진판단 이론 (0) | 2020.07.24 |
---|---|
[scikit-learn 라이브러리] Rasso 예제 (0) | 2020.07.24 |
규제 선형모델 Ridge와 Lasso 개념 이해 (0) | 2020.07.23 |
[scikit-learn 라이브러리] LinearRegression (선형회귀) (0) | 2020.07.23 |
단층 퍼셉트론 - 코드 복습 (0) | 2020.07.23 |