코딩헤딩

[ML(머신러닝)] 다중회귀모델 3 (규제, 릿지, 라쏘) 본문

머신러닝 | 딥러닝

[ML(머신러닝)] 다중회귀모델 3 (규제, 릿지, 라쏘)

멈머이 2023. 12. 31. 05:02
728x90

1. 규제

  - 과대 또는 과소 적합중에 주로 과대적합이 발생 했을 때 사용
  - 훈련의 정확도가 다소 낮아지는 경향이 있으나, 검증(테스트) 정확도를 높이는 효과가 있음
  - 훈련모델을 일반화 하는데 주로 사용되는 방법임
  - 규제 개념을 적용한 향상된 모델 : 릿지(Ridge)와 라쏘(Lasso)가 있다.

<규제 순서>
  1. 정규화(단위(스케일)를 표준화 하는 방식)
  2. 규제가 적용된 모델 훈련/검증

 

 

훈련 및 테스트 독립변수 정규화 하기

 

* 정규화를 위한 라이브러리

from sklearn.preprocessing import StandardScaler

 

<정규화 순서>
1. 정규화 클래스 생성 
2. fit() : 정규화 패턴 찾기
3. transform() : 찾은 패턴으로 정규화 데이터로 변환 (훈련 및 테스트 독립변수 변화)

 

* 정규화 클래스 생성

ss = StandardScaler()
ss

 

* 정규화 패턴 찾기

ss.fit(train_poly)

 

* 찾은 패턴으로 훈련 및 테스트 독립변수 변환 생성하기

train_scaled = ss.transform(train_poly)
test_scaled = ss.transform(test_poly)

print(f"{train_scaled.shape} / {test_scaled.shape}")

 


릿지(Ridge)모델

* 모델 생성하기

from sklearn.linear_model import Ridge

ridge = Ridge()
ridge

 

* 모델 훈련시키기

ridge.fit(train_scaled, train_target)

 

* 훈련 및 검증(테스트) 정확도 확인하기

train_r2 = ridge.score(train_scaled, train_target)
test_r2 = ridge.score(test_scaled, test_target)

train_r2, test_r2

 

* 예측하기

test_pred = ridge.predict(test_scaled)

 

* 평가하기(MAE)

mae = mean_absolute_error(test_target, test_pred)

train_r2, test_r2, mae

 

<해석>
  - 과적합 여부를 확인한 결과 과소적합은 발생하지 않았으며, 기존 특성공학을 적용한 우수한 모델보다는 

    훈련정확도 0.005정도 낮아졌지만, 검증(테스트) 정확도는 
    0.013 정도 높아졌음
  - 또한, 평균절대오차(MAE)도 1g 낮아졌음
  - 따라서, 일반화되고, 오차가 적은 Ridge(릿지) 모델은 매우 우수한 모델로 판단.


라쏘(Lasso)

* 사용할 패키지

from sklearn.linear_model import Lasso

 

* 모델 생성하기

lasso = Lasso()
lasso

 

* 훈련하기

lasso.fit(train_scaled, train_target)

 

* 점수 확인

train_r2 = lasso.score(train_scaled, train_target)
test_r2 = lasso.score(test_scaled, test_target)
train_r2, test_r2

 

* 예측하기

test_pred = lasso.predict(test_scaled)
test_pred

 

* 평가하기

mae = mean_absolute_error(test_target, test_pred)
mae

 

<해석>
  - 0.0002정도의 과소적합이 있는것으로 보임
  - 오차값도 3g정도 작아졌음
  - 과소적합이 미세한 차이이기 떄문에 릿지 모델과 비교 했을 떄 나쁜 모델은 아니지만,
    사용하기에는 미흡한 부분으로 판단함


<릿지(Ridge) 모델 규제 튜닝하기>

ridge = Ridge(alpha=0.01)
ridge.fit(train_scaled, train_target)
ridge.score(train_scaled, train_target), ridge.score(test_scaled, test_target)

결과 : (0.988739278805747, 0.9851828913418638)

lasso = Lasso(alpha=1)
lasso.fit(train_scaled, train_target)
lasso.score(train_scaled, train_target), lasso.score(test_scaled, test_target)

결과 : (0.9861305259897015, 0.98632202810554)

 

  - alpha : 규제강도 값
  - 값의 범위 0.01~ 100 사이의 값
  - 값이 작을수록 훈련 정확도는 낮아지면서, 과적합에 도움을 주게 됨
  - 값이 커질수록 훈련 정확도는 높아짐, 과적합에는 도움이 되지 않을수도 있음
  - 기본값은 = 1

 

728x90