반응형
엘라스틱넷(ElasticNet) 회귀
이전 실습을 통해 라쏘 회귀와 릿지 회귀에 대해 알아보았습니다. 이전 실습에서 그래프를 통해 확인한 바와 같이 라쏘(L1 정규화) 회귀는 너무 많은 βi를 0으로 만들고, 릿지(L2 정규화) 회귀는 βi를 완전히 0으로 만들지는 않기 때문에 여전히 모델의 복잡성이 높습니다.
따라서, 이 L1, L2 정규화를 동시에 사용하여 두 회귀의 장점을 가진 회귀인 엘라스틱넷 회귀가 등장하게 된 것입니다.
엘라스틱 넷 회귀는 L1 ,L2 정규화를 반영한 비율을 설정할 수 있기 때문에 결과를 확인해가며 자유롭게 비율을 조정해 높은 예측 성능을 가진 모델을 만들어보세요.
엘라스틱넷 회귀를 위한 사이킷런 함수/라이브러리
- from sklearn.linear_model import ElasticNet: 엘라스틱넷 회귀를 불러옵니다.
- ElasticNet(alpha, l1_ratio)
- alpha: 기본값은 1입니다.
- alpha값이 클수록 더 강한 정규화를 적용합니다.
- l1_ratio: L1 정규화를 반영할 비율
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from elice_utils import EliceUtils
elice_utils = EliceUtils()
from sklearn.linear_model import ElasticNet
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
"""
1. 사이킷런에 존재하는 데이터를 불러오고,
데이터와 변수 이름을 반환하는 함수를 구현합니다.
Step01. 사이킷런에 존재하는 boston 데이터를
(X, y)의 형태로 불러옵니다.
Step02. 데이터의 변수 이름을 feature_names 에 저장합니다.
[실습6]에서 구현한 함수를 그대로 이용할 수 있습니다.
"""
def load_data():
X, y = load_boston(return_X_y = True)
feature_names = load_boston().feature_names
return X,y,feature_names
"""
2. 엘라스틱 넷(ElasticNet) 회귀를 구현하고,
학습용 데이터를 바탕으로 학습시킨 모델을
반환하는 함수를 완성합니다.
Step01. 사이킷런에 구현되어 있는
엘라스틱 넷(ElasticNet) 회귀 모델을 불러옵니다.
파라미터 alpha와 l1_ratio를 자유롭게 설정합니다.
Step02. 불러온 모델을 학습용 데이터에 맞춰 학습시킵니다.
"""
def ElasticNet_regression(train_X, train_y):
ElasticNet_reg = ElasticNet(alpha = 0.001, l1_ratio = 0.001)
ElasticNet_reg.fit(train_X, train_y)
return ElasticNet_reg
# 각 변수의 beta_i 크기를 시각화하는 함수입니다.
def plot_graph(coef):
coef.plot(kind='bar')
plt.savefig("result.png")
elice_utils.send_image("result.png")
def main():
X,y,feature_names = load_data()
train_X, test_X, train_y, test_y = train_test_split(X,y,test_size=0.2, random_state=100)
elasticnet_reg = ElasticNet_regression(train_X, train_y)
# 엘라스틱넷 회귀 모델 평가 점수 출력하기
score = elasticnet_reg.score(test_X,test_y)
print("ElasticNet 회귀의 평가 점수:", score)
# 엘라스틱넷 회귀의 beta_i의 크기를 저장합니다.
ElasticNet_coef = pd.Series(elasticnet_reg.coef_, feature_names).sort_values()
print("\nElasticNet 회귀의 beta_i\n", ElasticNet_coef)
plot_graph(ElasticNet_coef)
return elasticnet_reg
if __name__=="__main__":
main()
반응형
'AI & 머신러닝 coding skill' 카테고리의 다른 글
머신러닝 분류 - 로지스틱 회귀(Logistic Regression) (0) | 2022.05.23 |
---|---|
머신러닝 - 회귀 알고리즘 평가 지표- R_squared (0) | 2022.05.23 |
머신러닝 - 회귀 알고리즘 평가 지표- MSE, MAE (0) | 2022.05.23 |
머신러닝 - 회귀 알고리즘 평가 지표- RSS (0) | 2022.05.23 |
머신러닝 - 릿지(Ridge), 라쏘(Lasso) 회귀 (0) | 2022.05.23 |
머신러닝 - 과적합 방지 기법 - 교차 검증 (0) | 2022.05.23 |
머신러닝 - 다항 회귀 모델 구현하기 (0) | 2022.05.23 |
머신러닝 - 다중 선형 회귀 모델 구현하기 (0) | 2022.05.23 |