규제 선형 모델
- 다항식이 복잡해지면서 회귀 계수값이 크게 설정되어 과대적합 유발
- "선형 모델"의 목적은 비용함수를 최소화하는 것
- "규제 선형 모델"의 목적은 비용함수를 최소화 하는데에 회귀계수 크기를 제한 (alpha)
Ridge
from sklearn.linear_model import Ridge
reg = Ridge(alpha=1)
reg.fit(X_train, y_train)
print(reg.score(X_train, y_train), reg.score(X_test, y_test))
print(reg.coef_)
alpha 값을 10으로 준 결과
0.7398240895568371 0.6724237562438147
[-0.12137453 0.03421897 -0.01307037 1.8210257 -1.68747299 4.09010212
-0.01841796 -1.18806788 0.24351944 -0.01208251 -0.76717881 0.01369631
-0.5734354 ]
alpha 값을 1(디폴트값)로 준 결과
0.7461161787884155 0.678974832784608
[-0.12383039 0.03139178 0.01767668 2.54277179 -8.77249222 4.37980204
-0.01537349 -1.29086084 0.24406848 -0.01082435 -0.83346553 0.01348642
-0.53435396]
Lasso
from sklearn.linear_model import Lasso
reg = Lasso(alpha=0.1) # 규제를 10으로 했을 때가 기본보다 성능이 낮음 -. 규제를 많이 한다고 해서 무조건 성능이 좋아지는 것은 아님
reg.fit(X_train, y_train)
print(reg.score(X_train, y_train), reg.score(X_test, y_test))
print(reg.coef_)
Elastic : Ridge + Lasso
<하이퍼파라미터>
alpha : 규제정도
l1_ratio : alpha 값 중 L1 규제의 비율
from sklearn.linear_model import ElasticNet
reg = ElasticNet(alpha=10, l1_ratio=0.2) # reg.alpha 기본값 : 1, reg.l1_ratio 기본값 : 0.5
reg.fit(X_train, y_train)
print(reg.score(X_train, y_train), reg.score(X_test, y_test))
print(reg.coef_)
model = Pipeline([
('poly', PolynomialFeatures(include_bias=False, degree=3)),
('reg', ElasticNet(alpha=1000, l1_ratio=.6)) # 규제 강도 alpha가 높아질수록 과대적합에 강해진다!!!
])
model.fit(X_train, y_train)
print(model.score(X_train, y_train), model.score(X_test, y_test))
evaluate_regression(y_test, model.predict(X_test))
'SKN > 05. Machine Learning' 카테고리의 다른 글
| 데이터 전처리 (0) | 2025.03.11 |
|---|---|
| EDA (0) | 2025.03.11 |