머신러닝/책 리뷰
[파이썬 라이브러리를 활용한 머신러닝] 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도 제공