Python을 사용하여 Lasso 구현
카탈로그
참고 문헌
라소
Lasso는 선형 모델의 회귀 중의 하나이다.
통상의 최소 2승법과 같은 점
통상의 최소 2승법과 다른 점
척추 회귀와 다른 점
준비
$ pip install scikit-learn
$ pip install mglearn
Lasso 구현
import mglearn
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(f"training dataに対しての精度: {lasso.score(X_train, y_train):.2}")
print(f"test set scoreに対しての精度: {lasso.score(X_test, y_test):.2f}")
# => training dataに対しての精度: 0.29
# => test set scoreに対しての精度: 0.21
고찰
사용된 특징량의 수량을 확인해 보세요.
import numpy as np
print(f"使われている特徴量の数: {np.sum(lasso.coef_ != 0)}")
# => 使われている特徴量の数: 4
4개밖에 안 사용한 것 같아요.모형을 더욱 복잡하게 할 수 있다면 정밀도를 높일 수 있다.
Lasso의 정규화를 조정하기 위해서는 모델의 매개 변수로서의 알파만 바꾸면 된다.
구속의 강도 변경
위의 Lassp 구현에서 정규화된 강도는 기본값을 유지합니다.
정규화의 강약, 즉 모델의 복잡도는 알파의 값을 바꾸어 우리(모델을 구축하는 측)를 결정한다.
aplha 감소
“alpha=0.01”.
lasso001 = Lasso(alpha=0.01, max_iter=100000).fit(X_train, y_train)
print(f"training dataに対する精度: {lasso001.score(X_train, y_train):.2f}")
print(f"test dataに対する精度: {lasso001.score(X_test, y_test):.2f}")
print(f"使われている特徴量の数: {np.sum(np.sum(lasso001.coef_ != 0))}")
# => training dataに対する精度: 0.90
# => test dataに対する精度: 0.77
# => 使われている特徴量の数: 33
고찰
두 가지 데이터의 정밀도를 높였다
따라서 이 Lasso를 사용한 모델에서는 33의 특징량만 사용했기 때문에 해석성이 증가했다.
척추 회귀
이번 데이터 집합을 사용하면 다음 조건에서 척추 회귀와 Lasso의 정밀도는 대체적으로 같다.
import mglearn
from sklearn.linear_model import Ridge
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)
ridge = Ridge(alpha=0.1).fit(X_train, y_train)
print(f"training dataに対しての精度: {ridge.score(X_train, y_train):.2}")
print(f"test set scoreに対しての精度: {ridge.score(X_test, y_test):.2f}")
# => training dataに対しての精度: 0.93
# => test set scoreに対しての精度: 0.77
그림 계수 크기
import matplotlib.pyplot as plt
plt.plot(lasso.coef_, 's', label="Lasso alpha=1")
plt.plot(lasso001.coef_, '^', label="Lasso alpha=0.01")
plt.plot(ridge.coef_, 'o', label="Ridge alpha=0.1")
plt.legend(ncol=2, loc=(0, 1.05))
plt.ylim(-25, 25)
plt.xlabel("Features index")
plt.ylabel("Coefficient magnitude")
plt.show()
고찰
'척추 회귀:alpha=0.1'과'Lasso:alpha=0.01'은 같은 정도의 정밀도를 나타내지만 계수의 편차는'척추 회귀:alpha=0.1'(녹색 ○)보다 훨씬 크다.
이 모델을 설명하기 어렵다는 얘기다.
따라서 해석성을 요구하는 경우에는 Lasso를 사용하는 것이 좋습니다.
경품
분석 결과와 도표의 대응을 확인하면서 공부하면 이해도가 깊어진다고 생각합니다.참고서에 도표가 나올 때는 그 해설을 읽기 전에 그 도표를 스스로 읽어보는 것이 좋다.
Reference
이 문제에 관하여(Python을 사용하여 Lasso 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kotamatsuoka/items/d09f09f23308627b42ab텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)