Regulerization(규제)

2021. 9. 8. 22:14ai/Machine Learning

728x90

https://sungin.tistory.com/142?category=1044420 

SGDClassifier, StandardScaler 에서 이어지는 내용

정규화(Standardization)까지 적용해서 model이 많이 향상 되었어요 !!

추가적으로 어떤 작업이 더 정확도를 올릴까요 ??

 

과적합 → 과대적합(overfitting)   - trainning data에 너무 잘 맞춰저 validation에서는 평가를 잘못함

                                            - trainning data(99%), validation data(80%)는 과대적합 = 대부분의 case

 

         → 과소적합(underfitting)   - data가 적거나 학습이 덜되어 문제가 발생 하지만 굉장히 드문 경우

                                            - trainning data, validation data 둘다 성능이 좋지 않거나 크지 않아요

 

 

과대적합 → "분산이 크다 (high variance) "라고도 표현

                주요원인 : 충분한 다양한 pattern의 data가 training data에 포함되지 않은경우

                               (data가 많아도 pattern이 다양하지 않으면 무용지물) 그러나 현실적으로 불가능

이유 : data도 많아야하지만 충분히 다양한 pattern이 많아야 적절한 model이 만들어진다

        현실세계의 예로 들어 1차 방정식만 공부한다면 2차 방정식을 풀수 없다

 

                해결방안 : model의 복잡도를 ↓    /    복잡도 - w가 늘어나면 학습을 잘할수 있으나 더 복잡해진다

                (1) W의 개수를 제한 (W는 당연히x와 갯수가 같다)

                (2) W의 값을 너무크지 않게 program적으로 임의로 제한 - "규제를 강화"

Regulerization(규제) : W(가중치, weigh)를 제한해서 overfitting을 피할 수 있어요 !

          ↕(반대)

과소적합(underfitting) : "편향이 크다(high bias)" 라고도 표현

                               모델이 충분히 복잡하지 않아서 발생하는 문제

 

                               - 해결방안 :  (1) W의 개수를 늘려주면 되요 (복잡도↑)

                                                (2) W의 값을 상대적으로 증가 → "규제를 완화

 

blue 그래프 → 경사가 급해요 → 일반적이지 않아요

pink 그래프 → 곡선이 완만 → 더 일반화된 graph

Regularization(규제) : 모델을 일반화 시켜서 성능을 높이려는 작업 

Regularization(규제)  → L1규제 : loss함수에 가중치의 절대값을 추가

w의 절대값의 합을 loss에 추가
이런식으로 cross Entropy마지막에 넣는다/ a*w의 합들 

위 식에 나오는 a는 Regularization parameter라고한다 . a는 내가 customizing

 

a값이 크면 Cross Entropy의 값이 커지지 않도록 W의 합이 작아져야 해요 → 규제가 강해졌다 

a값을 작게하면 상대적으로 W값이 커져도 Cross Entropy는 크게 영향을 받지 않는다 → 규제를 완화했다

 

 

Sklearn에서 L1 규제를 적용한 model이 우리에게 제공 → Lasso(라쏘)model을 제공 

 

그런데 L1규제는 많이 사용되지 않아요 → a값에 의해 규제정도가 너무 심하게 바뀌어요

그래서  L2규제를 보편적으로 이용 !!!!!!!!

 

L2규제

L2규제는 제곱이 붙어 a값의 영향이 줄어든다

L2규제는 모든 절대치에 제곱의 합

Sklearn에서 L2 규제를 적용한 model이 우리에게 제공 → Ridge(릿지)model을 제공 

Cross Entropy 마지막에 이렇게 들어간다

tensorflow 는 api나 찾아서 사용


 

# sklearn을 통해

# L2 규제를 포함해서 모델을 만들어 보아요!

%reset

import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import SGDClassifier
from sklearn.preprocessing import StandardScaler

model = SGDClassifier(loss='log',
                      max_iter=5000,
                      tol=1e-5,
                      random_state=2,
                      penalty='l2',
                      alpha=0.001)    

penalty= L2규제를 적용 시키겠다

# alpha = Regularization parameter값이며 우리가 customizing


cancer = load_breast_cancer()

x_data = cancer.data
t_data = cancer.target


train_x_data, valid_x_data, train_t_data, valid_t_data = \
train_test_split(x_data,
                 t_data,
                 stratify=t_data,
                 test_size=0.2,
                 random_state=2)

scaler = StandardScaler()
scaler.fit(train_x_data)

model.fit(scaler.transform(train_x_data), train_t_data)

# 모델을 평가를 할 때 사용할 데이터로 validation data를 이용해보아요!
valid_acc = model.score(scaler.transform(valid_x_data), valid_t_data)
print('valid데이터 평가한 경우 : {}'.format(valid_acc))

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

MNIST(Multinomial classification)/model평가  (0) 2021.09.10
Multinomial classification(다중분류)  (0) 2021.09.09
SGDClassifier, StandardScaler  (0) 2021.09.08
titanic code  (0) 2021.09.07
결측치처리  (0) 2021.09.06