2021. 9. 8. 22:14ㆍai/Machine Learning
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함수에 가중치의 절대값을 추가
위 식에 나오는 a는 Regularization parameter라고한다 . a는 내가 customizing
a값이 크면 Cross Entropy의 값이 커지지 않도록 W의 합이 작아져야 해요 → 규제가 강해졌다
a값을 작게하면 상대적으로 W값이 커져도 Cross Entropy는 크게 영향을 받지 않는다 → 규제를 완화했다
Sklearn에서 L1 규제를 적용한 model이 우리에게 제공 → Lasso(라쏘)model을 제공
그런데 L1규제는 많이 사용되지 않아요 → a값에 의해 규제정도가 너무 심하게 바뀌어요
그래서 L2규제를 보편적으로 이용 !!!!!!!!
L2규제는 제곱이 붙어 a값의 영향이 줄어든다
L2규제는 모든 절대치에 제곱의 합
Sklearn에서 L2 규제를 적용한 model이 우리에게 제공 → Ridge(릿지)model을 제공
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 |