ElasticNet
- 릿지모델과 라쏘모델의 하이브리드형이라고 생각하면 된다
- L1 Ratio (default = 0.5)
- L1_ratio = 0 (L2 규제만 사용).
- L1_ratio = 1 (L1 규제만 사용).
- 0 < L1_ratio < 1 (L1 and L2 규제의 혼합사용)
Step
모델 학습
from sklearn.linear_model import ElasticNet
# ratio 설정
ratios = [0.2, 0.5, 0.8]
# 학습
for ratio in ratios:
elasticnet = ElasticNet(alpha=0.5, l1_ratio=ratio)
elasticnet.fit(x_train, y_train)
pred = elasticnet.predict(x_test)
# mse_eval함수는 자체적으로 만든 것
mse_eval('ElasticNet(l1_ratio={})'.format(ratio), pred, y_test)
- 엘라스틱넷 중에서는 ratio가 0.8일 때 가장 좋다
ratio별로 coefficient 확인
- L1 ratio가 0.2일 때
elsticnet_20 = ElasticNet(alpha=5, l1_ratio=0.2)
elsticnet_20.fit(x_train, y_train)
elasticnet_pred_20 = elsticnet_20.predict(x_test)
plot_coef(x_train.columns, elsticnet_20.coef_)
- L1 ratio가 0.8일 때
elsticnet_80 = ElasticNet(alpha=5, l1_ratio=0.8)
elsticnet_80.fit(x_train, y_train)
elasticnet_pred_80 = elsticnet_80.predict(x_test)
# coefficient 시각화
plot_coef(x_train.columns, elsticnet_80.coef_)
# coefficient 확인
elsticnet_80.coef_