SKN/05. Machine Learning

규제선형모델

claovy☘️ 2025. 3. 11. 23:56

규제 선형 모델

  • 다항식이 복잡해지면서 회귀 계수값이 크게 설정되어 과대적합 유발
  • "선형 모델"의 목적은 비용함수를 최소화하는 것
  • "규제 선형 모델"의 목적은 비용함수를 최소화 하는데에 회귀계수 크기를 제한 (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