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

릿지와 라쏘 모델을 사용할 때 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 |