본문 바로가기
SW 교육

[2024.08.02] 특성 공학과 규제

by 하루한번토스트 2024. 8. 2.

특성 공학과 규제

 

규제는 머신러닝 모델이 훈련 세트를 너무 과도하게 학습하지 못하도록 훼방하는 것을 말한다.

(모델이 훈련 세트에 과대적합되지 않도록 만드는 것이다,)

 

 

선형 회귀 모델에 규제를 추가한 모델을 릿지라쏘 라고 한다.

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

라쏘 : 계수의 절대값을 기준으로 규제 적용

일반적으로 릿지를 조금 더 선호합니다.

 

릿지 회귀

 

릿지와 라쏘 모두 sklearn.linear_model 패지키 안에 있다.

모델 객체를 만들고 fit()메서드에서 훈련한다음 score()메서드로 평가한다.

from sklearn.linear_model import Ridge

ridge = Ridge()
ridge.fit(train_scaled, train_target)
print(ridge.score(train_scaled, train_target))

 

ridge= Ridge() 안에 alpha로 강도를 조절할수있다.

alpha 값이 크면 규제 강도가 세지므로 적절한 값을 찾아야한다.

적절한 값을 찾기 위해서는 alpha값에 대한 R^2값의 그래프를 그려봐야한다.

(훈련 세트와 테스트 세트의 점수가 가장 가까운 지점이 최적의 alpha값이 된다.

 

alpha_list = [0.001, 0.01, 0.1, 1, 10, 100]
for alpha in alpha_list:
    # 릿지 모델을 만듭니다
    ridge = Ridge(alpha=alpha) #alpha값을 바꿔가며 실행
    # 릿지 모델을 훈련합니다
    ridge.fit(train_scaled, train_target)
    # 훈련 점수와 테스트 점수를 저장합니다
    train_score.append(ridge.score(train_scaled, train_target))
    test_score.append(ridge.score(test_scaled, test_target))

 

 

 

라쏘 희귀 

Ride클래스를 Lasso클래스로 바꾸어준다.

 

from sklearn.linear_model import Lasso

lasso = Lasso()
lasso.fit(train_scaled, train_target)
print(lasso.score(train_scaled, train_target))

print(lasso.score(test_scaled, test_target))

train_score = []
test_score = []

alpha_list = [0.001, 0.01, 0.1, 1, 10, 100]
for alpha in alpha_list:
    # 라쏘 모델을 만듭니다
    lasso = Lasso(alpha=alpha, max_iter=10000)
    # 라쏘 모델을 훈련합니다
    lasso.fit(train_scaled, train_target)
    # 훈련 점수와 테스트 점수를 저장합니다
    train_score.append(lasso.score(train_scaled, train_target))
    test_score.append(lasso.score(test_scaled, test_target))

 

릿지와 라쏘는 적절하게 사용하면 적절한 결과가 나온다.

 


log-자연로그(e)

log10-상용로그(밑수가 10인 로그)

 

numpy에서 log()이라고 하면 자연로그, log10()이라고 하면 상용로그를 의미한다.