본문 바로가기

BLOG/머신러닝

[머신러닝] 사이킷런(Scikit-learn) 데이터로 ElasticNet 회귀 모델 만들기 - ElasticNet()

이전에 사이킷런 라이브러리와 데이터를 이용하여 Ridge, Lasso 회귀 모델을 만드는 방법에 대해서 살펴보았는데요,

이번에 살펴볼 ElasticNet 회귀 모델 역시 같은 방법으로 코드를 입력하면 된답니다. 한번 아래 코드를 보면서 차근차근 살펴보도록 하겠습니다.

 

 

1. ElasticNet 모델이란?

ElasticNet은 Ridge와 Lasso를 결합한 형태의 모델로, 가중치의 절대값의 합(L1)과 제곱의 합(L2)을 동시에 제약 조건으로 가지는 모델을 말합니다. 따라서 Ridge와 Lasso 보다 좋은 성능을 낼 수 있다는 장점을 가지는 모델입니다.

한편, 사이킷런에서 제공하는 ElasticNet 함수에서 L1과 L2의 비율을 지정할 수 있는데, 아래에서 살펴보도록 하겠습니다.

 

 

2. 학습에 사용할 데이터 불러오기

ElasticNet 모델을 만들기 앞서, 필요한 라이브러리를 import 해주고, 필요한 데이터를 불러와야 하는데요, 이때 데이터는 사이킷런 라이브러리에서 제공하는 boston data를 사용하도록 하겠습니다.

 

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import ElasticNet

boston_dataset = datasets.load_boston()

 

 

3. train data, test data 로 나누기

데이터를 불러왔다면 이를 train data, test data로 나누어야 하는데요, 아래와 같이 train_test_split() 함수를 이용하여 데이터를 나눠줄 수 있습니다.

 

X_train, X_test, y_train, y_test = train_test_split(boston_dataset['data'],
                                                    boston_dataset['target'],
                                                    test_size=0.2,
                                                    random_state=0)

 

이와 같이 입력한 뒤, X_train 을 출력해보면 학습에 사용될 입력값이 들어가 있는 것을 확인할 수 있습니다.

 

 

4. ElasticNet 모델 만들기

train data, test data까지 잘 만들었다면 이제 ElasticNet 모델을 만들고 학습시키면 되는데요, 아래와 같이 ElasticNet() 함수를 이용하여 모델을 만들 수 있는데요, 이때 L1과 L2의 비율을 지정해줄 수 있습니다. L1과 L2의 비율을 7 : 3으로 조정하고 싶다면 다음과 같이 코드를 작성하면 됩니다.

 

elasticnet = ElasticNet(alpha=0.3, l1_ratio=0.7).fit(X_train, y_train)

 

한편, ElasticNet() 함수 뒤 fit(X_train, y_train) 코드는 이 ElasticNet 모델에 X_train, y_train 데이터로 학습을 하겠다는 것을 의미합니다. 따라서 위 코드를 입력한 뒤 실행하면, 학습이 이루어진 ElasticNet 모델을 얻게 됩니다.

 

 

5. 정확도 측정하기

ElasticNet 모델을 만들고 학습을 했다면, 학습이 잘 이루어졌는지를 확인하기 위해 정확도를 측정해볼 수 있는데요, 다음과 입력해줌으로써 정확도를 측정할 수 있습니다.

 

print("훈련 세트 점수: {:.2f}".format(elasticnet.score(X_train, y_train)))
print("테스트 세트 점수: {:.2f}".format(elasticnet.score(X_test, y_test)))

#output :
훈련 세트 점수: 0.77
테스트 세트 점수: 0.57

 

 

정확도 출력 결과, train data에 대한 정확도는 0.77, test data에 대한 정확도는 다소 낮은 0.57로 측정되었음을 확인할 수 있습니다.