regularization (규제)
- 추가로 편향(bias) 를 주입, 개별 가중치 값을 제한하여 overfitting 방지
L2 regularization
- cost function 에
penalty term
(패널티 항) 을 추가
- 패널티가 커질수록 가중치 값을 작게 만드는 효과
L2:∥w∥22=j=1∑mwj2
- regularization parameter (규제 파라미터) λ 로 규제 강도를 크게 하면
- -> 가중치가 0에 가까워지고
- -> 모델 의존성 감소 (=overfitting 방지)
- λ 가 커질수록 패널티 비용 증가
L1 regularization
- L2 의 제곱을 절대값으로 변경한 형태
- L2 에 비해 희소한 feature vector 를 만드는 편
- 관련 없는 feature 가 많은 고차원 데이터셋에서 유리
L1:∥w∥1=j=1∑m∣wj∣
- scikit-learn 에서 L1 regularization 적용
- logistic regression 의
lbfgs
는 L1 regularization 미지원하여 liblinear
적용
C
는 regularization parameter (규제 파라미터) λ 의 역수
C
가 작을수록 패널티가 커지고, 가중치가 낮아지는 효과
def test_l1_legularization():
x_train, x_test, y_train, y_test = get_dataset()
sc = StandardScaler()
sc.fit(x_train)
x_train_std = sc.transform(x_train)
x_test_std = sc.transform(x_test)
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판'