-
[Linear model]라소 회귀공부/A.I 2021. 5. 15. 17:19
파이썬 라이브러리를 활용한 머신러닝(번역개정판)
사이킷런 핵심 개발자에게 배우는 머신러닝 이론과 구현 현업에서 머신러닝을 연구하고 인공지능 서비스를 개발하기 위해 꼭 학위를 받을 필요는 없습니다. 사이킷런(scikit-learn)과 같은 훌륭
books.google.co.jp
- 라소 회귀 모델
Lasso Regression Model, 리지 회귀와 같이 라소도 계수를 0에 가깝게 만들려고 하고, 어떤 계수는 실제로 0이 된다.
라소 회귀는 L1규제를 사용한다.
L1규제를 사용해 계수를 0에 가깝게 하고, 어떤 계수는 0으로 만든다.
계수(특성)이 0이라는 뜻은 모델에서 와전히 제외되었다는 의미이다. (특성 선택이 자동으로 이루어진다.)
일부 계수들이 0이 되면, 모델을 이해하기 쉬워지고, 이 모델의 가장 중요한 특성이 무엇인지 드러내준다.
Lasso(alpha = 0.1, max_iter=1000)
alpha매개변수 : 계수(특성)을 얼마나 강하게 0으로 보낼지(기본 값은 1.0이다.)
max_iter매개변수 : 반복 실행하는 최대 횟수
(좌표하강법을 통해 학습과정이 반복적으로 진행되면서 최적의 값을 찾는다. 이때의 반복 횟수를 제한한다.
만약 max_iter가 모델이 반복하는 횟수보다 작으면 경고메시지가 출력된다.)n_iter_속성 : 모델이 수행한 반복횟수
Lasso Regression 라소 모델의 alpha 값을 조정하면서, 모델의 점수와 계수가 0이 아닌 특성의 개수(사용한 특성의 개수)를 살펴보면,
alpha값이 작아질수록, 많은 특성이 모델에 영향을 주며, 모델의 복잡도가 올라감을 볼 수 있다.
또한 모델이 학습을 위해 반복한 횟수도 증가한다.
- alpha값에 따른 계수 크기 비교
- code
import mglearn import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import Lasso from sklearn.model_selection import train_test_split X, y = mglearn.datasets.load_extended_boston() X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) lasso = Lasso().fit(X_train, y_train) print("훈련 세트 점수 : %2f" %lasso.score(X_train, y_train)) print("테스트 세트 점수 : %2f" %lasso.score(X_test, y_test)) print("사용한 특성의 개수 : %d\n" %np.sum(lasso.coef_ !=0)) #만약 max_iter가 반복횟수보다 작으면 경고 메시지가 출력됨 lasso01 = Lasso(alpha = 0.1, max_iter=100000).fit(X_train, y_train) print("001훈련 세트 점수 : %2f" %lasso01.score(X_train, y_train)) print("001테스트 세트 점수 : %2f" %lasso01.score(X_test, y_test)) print("모델이 수행한 반복 횟수 : %d" %lasso01.n_iter_) print("사용한 특성의 개수 : %d\n" %np.sum(lasso01.coef_ !=0)) lasso0001 = Lasso(alpha = 0.001, max_iter=100000).fit(X_train, y_train) print("0001훈련 세트 점수 : %2f" %lasso0001.score(X_train, y_train)) print("0001테스트 세트 점수 : %2f" %lasso0001.score(X_test, y_test)) print("모델이 수행한 반복 횟수 : %d" %lasso0001.n_iter_) print("사용한 특성의 개수 : %d\n" %np.sum(lasso0001.coef_ !=0)) lasso0000001 = Lasso(alpha = 0.00001, max_iter=10000000).fit(X_train, y_train) print("00001훈련 세트 점수 : %2f" %lasso000001.score(X_train, y_train)) print("00001테스트 세트 점수 : %2f" %lasso000001.score(X_test, y_test)) print("모델이 수행한 반복 횟수 : %d" %lasso000001.n_iter_) print("사용한 특성의 개수 : %d\n" %np.sum(lasso000001.coef_ !=0))
'공부 > A.I' 카테고리의 다른 글
[Linear model]다중 클래스 분류 (0) 2021.05.16 [Linear model for classification]이진 분류 (0) 2021.05.15 [Linear model]리지 회귀 (0) 2021.05.12 [Linear model]선형회귀(최소제곱법) (0) 2021.05.11 knn_regression(k-최근접 이웃 회귀) (0) 2021.05.10