[ML] regularization 를 통한 모델 복잡도 제한

Woong·2023년 8월 23일
0

Python / Machine Learning

목록 보기
11/22

regularization (규제)

  • 추가로 편향(bias) 를 주입, 개별 가중치 값을 제한하여 overfitting 방지

L2 regularization

  • cost function 에 penalty term (패널티 항) 을 추가
    • 패널티가 커질수록 가중치 값을 작게 만드는 효과

L2:w22=j=1mwj2L2:{\Vert{w}\Vert}^2_2= \displaystyle\sum_{j=1}^{m}w^2_j

  • regularization parameter (규제 파라미터) λ\lambda 로 규제 강도를 크게 하면
    • -> 가중치가 0에 가까워지고
    • -> 모델 의존성 감소 (=overfitting 방지)
    • λ\lambda 가 커질수록 패널티 비용 증가

L1 regularization

  • L2 의 제곱을 절대값으로 변경한 형태
    • L2 에 비해 희소한 feature vector 를 만드는 편
      • 대부분의 feature weight이 0
    • 관련 없는 feature 가 많은 고차원 데이터셋에서 유리

L1:w1=j=1mwjL1:{\Vert{w}\Vert}_1= \displaystyle\sum_{j=1}^{m}|w_j|

  • scikit-learn 에서 L1 regularization 적용
    • logistic regression 의 lbfgs 는 L1 regularization 미지원하여 liblinear 적용
    • C 는 regularization parameter (규제 파라미터) λ\lambda 의 역수
      • C 가 작을수록 패널티가 커지고, 가중치가 낮아지는 효과
def test_l1_legularization():
    x_train, x_test, y_train, y_test = get_dataset()
    # feature 표준화
    sc = StandardScaler()
    # traing data set 의 feature dimension 마다 평균과 표준 편차 계산
    sc.fit(x_train)

    # transform: 평균과 표준 편차로 data set 을 표준화
    x_train_std = sc.transform(x_train)
    x_test_std = sc.transform(x_test)

    # logistic regression
    # C 기본값 1. 규제 효과를 높이거나 낮추는 효과
    lr = LogisticRegression(solver='liblinear', penalty='l1', C=1.0, random_state=1)
    lr.fit(x_train_std, y_train)

    print(f'predict_proba (class 소속 확률) :\n {lr.predict_proba(x_test_std[:3, :])}')
    print(f'predict (class label) :\n {lr.predict(x_test_std[:3, :])}')

    print(f'training 정확도 : {lr.score(x_train_std, y_train)}')
    print(f'test 정확도 : {lr.score(x_test_std, y_test)}')

reference

  • 서적 '머신러닝 교과서 with 파이썬, 사이킷런, 텐서플로 개정 3판'

0개의 댓글