규제

2024. 6. 14. 16:02Machine Learning

 

✅ 규제

 

✅ 학습 목표

 

✅ 선형 회귀 수업 흐름도

 

✅ 규제란?

 

✅ 선형 회귀

 

✅ 모델 정규화

- L2 규제를 더 자주 씀!

- 가중치 크기로 중요도를 판단!

 

✅ L2 - Ridge

# 모델 import

from sklearn.linear_model import Ridge
ridge_model = Ridge(alpha=100)
ridge_model.fit(extend_X_train, y_train)

ridge_model.score(extend_X_test, y_test)

ridge_model.score(extend_X_train, y_train)

  • 📌 test 성능은 좋아졌는데 과대적합은 완전하게 해소하지 못했다.

✅ L1 - Lasso

from sklearn.linear_model import Lasso
lasso_model = Lasso(alpha=100)
lasso_model.fit(extend_X_train, y_train)

lasso_model.score(extend_X_test, y_test) # 일반보다 상승, 릿지보다 하락

lasso_model.score(extend_X_train, y_train)

  • 📌 현재 데이터는 라쏘가 조금 더 유리한 것 같다
  • 특성 확장으로 인해 무의미한 특성들이 많이 늘어있는 상태
  • 조건이 복잡해서 과대적합 발생!
  • 무의미한 특성을 제외(가중치가 0이 되는)하는 Lasso모델이 조금 더 유리해 보인다.

✅ 규제별 규제강도에 따른 가중치의 변화값 확인해보기

alpha_list = [0.001, 0.01, 0.1, 10, 100, 1000] # 규제 강도 모음집 / 기본값 1 -> 제외

ridge_coef_list = [] # 릿지모델 가중치 리스트
lasso_coef_list = [] # 라쏘모델 가중치 리스트

# 릿지모델과 라쏘모델 가중치 변경하면서 학습 시켜보기(반복문 사용)

for alpha in alpha_list :
    
    # 모델 설정 부
    
    r_model = Ridge(alpha=alpha)
    l_model = Lasso(alpha=alpha)
    
    # 모델 학습 부
    r_model.fit(X_train, y_train)
    l_model.fit(X_train, y_train)
    
    # 빈 리스트에 가중치 넣어주기
    ridge_coef_list.append(r_model.coef_)
    lasso_coef_list.append(l_model.coef_)
# 라쏘 정규화 규제 강도별 가중치 확인해보기

lasso_df = pd.DataFrame(np.array(lasso_coef_list).T,
                       columns=alpha_list,
                       index=X_train.columns)
lasso_df

ridge_df = pd.DataFrame(np.array(ridge_coef_list).T,
                       columns=alpha_list,
                       index=X_train.columns)
ridge_df

'Machine Learning' 카테고리의 다른 글

Logistic Regression  (0) 2024.06.14
보스턴 주택 데이터 회귀분석  (0) 2024.06.14