OFMY (Ony for me and you)

[파이썬 라이브러리를 활용한 머신러닝] 2.3.2 선형모델 - Lasso 본문

머신러닝/책 리뷰

[파이썬 라이브러리를 활용한 머신러닝] 2.3.2 선형모델 - Lasso

선뭉 2023. 9. 7. 14:33

릿지의 대안 Lasso의 등장 Lasso는 또 뭘까?

라쏘는 릿지와 다르게 L1규제를 통해 계수를 0에 가깝게 함

* L1규제: 계수를 0에 가깝게 만드는데, 어떤 계수는 정말 0이 되기도 함 -> 완전히 제외되는 특성이 존재 -> 특성 선택이 자동으로 이루어짐

 

from sklearn.linear_model import Lasso 
lasso = Lasso().fit(X_train, y_train)

print("훈련 세트 점수: {.2f}".format(lasso.score(X_train, y_train)))
print("테스트 세트 점수: {.2f}".format(lasso.score(X_test, y_test)))
print("사용한 특성의 수: {}".format(np.sum(lasso.coef_ != 0)))

결과:

훈련 세트 점수: 0.29
테스트 세트 점수: 0.21
사용한 특성의 수: 4

 

훈련세트, 테스트 세트 모두 결과가 좋지 않음 = 과소 적합 됨 
105개의 특성 중 4개만 사용됨

Ridge처럼 alpha를 통해 규제의 정도를 조절할 수 있나?

Lasso 또한 alpha를 통해 얼마나 강하게 0으로 보낼지를 조절할 수 있음 - max_iter(반복 실행하는 최대 횟수)의 기본값을 늘리기

 

from sklearn.linear_model import Lasso 
lasso001 = Lasso(alpha = 0.01, max_iter=100000).fit(X_train, y_train)

print("훈련 세트 점수: {.2f}".format(lasso001.score(X_train, y_train)))
print("테스트 세트 점수: {.2f}".format(lasso001.score(X_test, y_test)))
print("사용한 특성의 수: {}".format(np.sum(lasso001.coef_ != 0)))

결과: 

훈련 세트 점수: 0.9
테스트 세트 점수: 0.77
사용한 특성의 수: 33

alpha 값을 낮추어 모델의 복잡도를 증가시켜 성능을 개선시킴 

 


Ridge vs Lasso 승자는?

실제로 이 두 모델 중 보통은 릿지 회귀를 선호 

but, 특성이 많고 그중 일부분만 중요하다면? Lasso를 선택하는 게 더 좋은 선택이 될 수도!

 

sckit-learn 패키지에서는 lasso와 ridge의 페널티를 결합한 ElasticNet도 제공