본문 바로가기

ML,DL

[ML] Ridge, Lasso Regression

선형 회귀 모델에 규제를 추가한 모델

릿지와 라쏘 모델을 사용할 때 alpha 매개변수로 규제의 강도를 조절

  • alpha 값이 크면 규제 강도가 세지므로 계수 값을 더 줄이고 조금 더 과소적합되도록 유도
  • alpha 값이 작으면 계수를 줄이는 역할이 줄어들고 선형 회귀 모델과 유사해짐 -> 과대적합될 가능성이 큼

릿지 회귀 Ridge

계수를 제곱한 값을 기준으로 규제를 적용

from sklearn.linear_model import Ridge, Lasso
poly = PolynomialFeatures(degree=10)
perch_full_ss_poly = poly.fit_transform(perch_full_ss)
X_train, X_test, y_train, y_test = train_test_split(perch_full_ss_poly, perch_weight, random_state=25)

lr = LinearRegression()
lr.fit(X_train, y_train)
print(lr.score(X_train, y_train), lr.score(X_test, y_test))

ridge = Ridge(alpha=6.0) # alpha : 규제 강도
ridge.fit(X_train, y_train)
print(ridge.score(X_train, y_train), ridge.score(X_test, y_test))

적절한 규제 강도 찾기

alpha 값을 변경하면서 낸 score를 그래프로 시각화하여 찾는다.

alpha_list = list(range(1,11))
train_score_list, test_score_list = [], []
for alpha in alpha_list:
  ridge = Ridge(alpha = alpha)
  ridge.fit(X_train, y_train)
  train_score_list.append(ridge.score(X_train, y_train))
  test_score_list.append(ridge.score(X_test, y_test))
  
import matplotlib.pyplot as plt
plt.plot(alpha_list, train_score_list, label = 'train score')
plt.plot(alpha_list, test_score_list, label = 'test score')
plt.legend()
plt.xlabel('alpha')
plt.ylabel('R^2')
plt.show()

가장 최적의 alpha 값은 6

라쏘 회귀

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

적절한 규제 강도 찾기

alpha_list = [0.001,0.01,0.1,1,10,100]
train_score_list, test_score_list = [], []
for alpha in alpha_list:
  lasso = Lasso(alpha = alpha, max_iter=10000)
  lasso.fit(X_train, y_train)
  train_score_list.append(lasso.score(X_train, y_train))
  test_score_list.append(lasso.score(X_test, y_test))
  
import matplotlib.pyplot as plt
plt.plot(np.log10(alpha_list), train_score_list, label = 'train score')
plt.plot(np.log10(alpha_list), test_score_list, label = 'test score')
plt.legend()
plt.xlabel('alpha')
plt.ylabel('R^2')
plt.show()

라쏘 모델을 훈련할 때 ConvergenceWarning 경고가 뜰 경우

사이킷런의 라쏘 모델은 반복적인 계산을 수행하는데, 지정한 반복 횟수가 부족할 때 이런 경고 발생

해결 방법 : max_iter 매개변수를 늘려주기 ( max_iter = 10000 )

여기서 최적의 alpha = 1 -> 10

 

'ML,DL' 카테고리의 다른 글

[ML] 확률적 경사 하강법  (0) 2024.04.08
[ML] 로지스틱 회귀 Logistic Regression  (0) 2024.04.08
[ML] 다중 회귀 multiple regression  (0) 2024.04.05
[ML] 선형 회귀 Linear Regression  (0) 2024.04.05
[ML] K-최근접 이웃 회귀  (0) 2024.04.05