본문 바로가기

BLOG/머신러닝

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

 

지난 글에서는 사이킷런 라이브러리를 이용하여 릿지 회귀 모델을 만들어보았는데요, 이번에는 라쏘(Lasso) 회귀 모델을 만드는 방법에 대해서 살펴보겠습니다.

 

 

1. 라쏘 회귀 모델이란?

라쏘(Lasso)는 선형 회귀 모델 중 하나로, 릿지(Ridge) 회귀 모델을 보완하기 위해 사용됩니다.

라쏘 모델은 릿지와 같이 계수를 0에 가깝도록 만드는 L1 규제를 하며, 가중치의 절대값의 합을 최소화하는 계수를 추가하는 방식을 통해 학습을 합니다. 이러한 라쏘는 많은 특성 중 일부분만 분석할 때 쉽게 분석이 가능하다는 장점을 갖고 있습니다.

 

 

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

라쏘 회귀 모델을 만들기 앞서, 필요한 라이브러리를 설치해주어야 하며,  학습에 사용할 데이터를 불러와야 하는데요, 사이킷런에서 제공하는 보스턴 주택 데이터(boston_data)를 불러오도록 하겠습니다.

 

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Lasso
import numpy as np

boston_dataset = datasets.load_boston()

 

 

3. train data, test data로 나누기

데이터를 불러왔다면, 학습을 시키기 위해 입력값을 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,
                                                    shuffle=True,
                                                    random_state=0)

 

위 코드를 보면 보스턴 데이터의 'data' 특성을 입력값, 'target' 값을 결과값으로 입력해주었고,

train data와 test data의 비율을 0.8 : 0.2 으로 무작위(shuffle=True)로 설정해주었습니다.

 

위와 같이 입력한 뒤, X_train을 출력해보면 데이터가 잘 입력되었음을 확인할 수 있습니다.

 

 

4. 라쏘 회귀 모델 만들기

라쏘 회귀 모델은 Lasso() 함수를 이용하여 쉽게 만들 수 있는데요, 아래와 같이 입력해주면 됩니다.

 

lasso = Lasso(alpha=0.3).fit(X_train, y_train)

 

Lasso() 함수 뒤에 fit(X_train, y_train) 으로 입력된 부분은 해당 Lasso() 함수에 X_train, y_train 데이터를 이용하여 학습시키겠다는 것을 의미합니다. 한편, Lasso() 함수 안에 있는 alpha 값은 조정이 가능합니다.

 

이렇게 입력하고 실행을 하면, 해당 데이터로 학습된 라쏘 회귀 모델이 만들어진답니다.

 

 

5. 학습 결과(정확도) 출력하기

위에서 만든 라쏘 회귀 모델이 학습이 잘 이루어졌는지 확인하기 위해서 train data에 대한 정확도와 test data에 대한 정확도를 출력할 수 있는데요, 다음과 같이 입력하면 됩니다.

 

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

# output :
훈련 세트 점수: 0.76
테스트 세트 점수: 0.55

 

정확도 확인 결과, train data에 대한 학습의 정확도는 0.76, test data에 대한 학습 정확도는 다소 낮은 0.55가 측정되었음을 확인할 수 있습니다.

 

 

 

전체 코드는 다음과 같습니다.

 

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Lasso
import numpy as np

boston_dataset = datasets.load_boston()

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

lasso = Lasso(alpha=0.3).fit(X_train, y_train)