이진분류의 평가
질문. 정확도로 제대로 된 모델의 성능을 측정하기를 어려운 사례?
- 데이터가 불균형한 경우
- 금융(은행대출사기, 신용카드사기, 상장폐지종목여부), 제조업(양불여부), 헬스케어(암진단여부), IT관련(게임 어뷰저, 광고 어뷰저, 그 외 어뷰저) -> 대회에서 어뷰저 관련 내용을 찾을때는 Fraud등으로 검색하면 여러사례를 찾을 수 있다.
- 이런 사례는 Accuracy로 측정하면 99.99 % 가 나온다면 제대로 측정하기 어렵다.
Confusion Matrix
- 뒤에꺼는 예측을 긍/부정으로했냐, 앞에꺼는 그 예측이 맞았냐 틀리냐로 해석
1종오류의 사례
- 1종오류는 통계상 실제로는 음성인데 양성으로 결과가 나오는 것을 말한다(TP)
- 1종오류는 precision(정밀도)이라는 측정지표를 사용한다(TP / (TP + FP)) -->예측값기준
- 스팸메일, 유무죄선고
2종오류의 사례
- 통계상으로 실제로는 양성인데 음성으로 결과가 나오는 것을 말한다(FN)
- recall(재현율, 민감도)이라는 측정지표를 사용한다(TP/(TP + FN)) --> 실제값기준
- 암인데 암이 아니라고 예측한 경우, 지진이 났는데 대피방송을 하지 않는 경우,
- 자율주행떄 앞에 사람이 있는데 사람이라고 인식하지 못하는 경우
F-1Score
- 정밀도와 재현율의 조화평균
- 정밀도와 재현율은 trade-off관계이다. 둘 중 하나만 사용하면 예측성능평가지표로 불완전하다
- F1-Score는 정밀도와 재현율 둘 다 높아야 높은 점수를 가질 수 있으며, 둘 중 하나로 치우칠 경우 점수가 상대적으로 낮아진다.
ROC Curve
- 예측값이 확률인 분류 문제에 사용
- 1에 가까울 수록 좋다
AUC
- ROC 커브 아래의 곡면의 넓이를 의미합니다.
- 1에 가까운 점수가 나올수록 잘 예측한것이라고 볼 수 있음
- 기존에는 예측을 할 때 주로 predict 를 사용했지만 predict_proba 를 하게 되면 0,1 등의 클래스 값이 아닌 확률값으로 반환한다.
- 임계값(Threshold)을 직접 정해서 True, False를 결정하게 되는데 보통 0.5 로 하기도 하고 0.3, 0.7 등으로 정하기도 한다.
- TPR: 실제 양성 샘플중에서 양성으로 예측된 것의 비율, 1에 가까울 수록 좋음
- FPR: 실제 음성 샘플 중에 양성으로 잘못 예측된 것의 비율, 0에 가까울 수록 좋음 +공돌이의 수학정리노트 참고해보자+
실습0804
predict_proba
- 보통 멀티클래스분류일 때 사용한다.
- 각 클래스마다의 확률을 예측한다
- 0, 1일 때 각각의 확률을 의미한다
- [0.5, 0.5], [0.3, 0.7], [0.7, 0.3]이렇게 나오기도 한다
- 클래스가 여러개일 때 이런 확률을 사용해서 예측하기도한다.
- np.argmax: 값이 가장 큰 인덱스를 반환한다.
- np.argmin: 값이 가장 작은 인덱스를 반환한다.
신용카드 사기를 측정하는 지표
- recall이 더 적절하다. 실제로는 양성인데 음성으로 예측한 경우
- 즉 음성이 사기 아니고, 양성이 사기라고 판단할 수 있으므로
- 주택담보대출에도 비슷하게 적용할 수 있다.
precision, recall등의 지표에 대해
- 이런 지표들은 실제로 비즈니스에서 운영할 때 어느쪽으로 평가를 해야 유리한지를 판단이 필요
SMOTE
- 정답 클래스가 불균형데이터일경우 resampling으로 클래스를 비슷하게 만들어줘서 모델 성능을 높임
Resampling
- 현실 속 데이터는 불균형한 데이터가 대부분이다.
under-sampling
- 더 값이 많은 쪽에서 일부만 샘플링하여 비율을 맞춰주는 방법
- 신용카드 데이터에서 X데이터 개수(즉 class가0)를 class가 1인 개수로 맞추는 것
oversampling
- SMOTE
- 합성 소수자 오버 샘플링 기법
- k-근접 이웃 값을 이용해 합성된 새로운 값을 추가
- 내부에서 k-근접이웃 알고리즘을 사용하고있음
- 값이 더 커진다.
딥러닝기초
- 신경망(neural network)을 쓰고 있는 알고리즘
- 즉 딥러닝(deep learning)이란 네트워크를 깊게 쌓는 것(neural network), 층을 깊게 쌓아 학습한다.
- 인간 개입의 여부로 머신러닝과 구분함
- 비정형데이터를 다룰 때 더 유리함
- 알아서 데이터 전처리 및 피처를 추출하는 기법이 알고리즘 내에 내장되어 있음
- 1950년대에 등장하였지만, 데이터 및 하드웨어의 한계로 연구가 활발지 진행되지 않음
인공신경망
초기 인공신경망: 퍼셉트론
- 사람의 신경망을 모방함
- 특정 입계값에 따라 동작을 하는 구조이다
- 하지만 과적합문제의 위험이 있음,
- XOR연산을 가능하게함(단층으로되어있는 것을 다층으로 바꿈으로써 해결함/질문하심!)
- 학습시간이 느리다는 것도 그래픽카드의 발전으로 개선됨
- 입력 > Activation Function > 출력
딥러닝연산
순전파(Foward Propagation)
- 입력층에서 출력층 방향으로 예측값의 연산이 진행되는 과정
- Input을 받고 다수의 hidden layer에서 활성화함수 적용을 통하여 output을 출력하는 과정
역전파(Back Propagation)
- 출력층에서 입력층 방향으로 계산하면서 가중치를 업데이트
- 역전파를 통해 가중치비율을 조정하며 다시 순전파로 진행하며 오차 감소를확인함
- 오차를 최소화하기 위해 미분기법을 이용하게됨
- 순전파 과정에서 출력한 결과와 정답값의 오차를 측정하여 그 오차의 값을 최소화하기 위한 과정
- 순전파 때 적용한 활성화함수의 결과를 검산하여 오차를 줄여주는 과정이기때문에 따로 활성화함수를 사용하지 않음
- 이전 층의 오차를 보완해나가면서 진행한다는 점이 부스팅과 유사함
오차역전접
- 동일 입력층에 대해 원하는 값이 출력되도록 각각의 가중치를 조정하는 방법
- 미분을 진행하게된다. 손실함수를 최소화하는 기울기값을 구하기위해(즉 기울기가 0이 되는)
활성화함수
- 은닉층과 출력층의 뉴런에서 출력값을 결정하는 함수
- 시그모이드: 이진분류의 출력값으로 주로 사용된다
- **하이퍼볼릭탄젠트함수(tanh)**: 시그모이드함수와 똑같은 형태이다.
- 일정 범위를 벗어나 기울기가 0이 되면 기울기 소실 문제가 발생함 = Gradient Vanishing >ReLU로 문제 해결
- 반대로 기울기가 발산하기도함 = Gradient Exploding
- Relu(렐루): 은닉층의 활성화함수로 사용
- Leaky Relue: Dying Relu현상을 해결하기 위해, 아주 미세하게 기울기를 조정함
딥러닝학습법
- 어떻게 기울기의 최소점을 찾아나갈것이냐
- 오차를 최소화하는 가중치와 편향의 조합 찾기
- 가중치는 오차를 최소화하는 방향으로 모델이 스스로 탐색
- 알맞은 손실함수의 선정은 매우 중요
- 이를 위해 고안된 방법이 경사하강법이며, 옵지마이저로 경사하강법의 원리를 이용함
손실함수
- 오차의 차이를 수치화해주는 함수
- 오차가 최소화되는 즉 0에 가까운 기울기일수록 오차가 작은 지점이라고 해석할 수 있음
- 분류의 손실함수로는 멀티클래스 분류일때는 softmax, 이진분류일때는 sigmoid 손실함수를 사용함
- 손실함수를 사용해 cross