본문 바로가기

Python/Data Analysis

Data Analysis / ML / Basic Concept(3)

< Overfitting & Underfitting >

▷ Overfitting : Training Data에 대해 너무 학습이 잘되어 실제 데이터에 적용이 잘 안되는 경우

▷ Underfitting : 너무 대충 학습해서 학습이 잘 이루어지지 않은 경우

Overfitting & Underfitting

※ Overfitting 현상을 해결하기 위한 방법은?

1. 많은 양의 Training Data 필요

  • 가장 기반이되는 조건인데 program 적으로 해결이 불가능

2. Feature의 개수를 줄이자

  • 종속변수와 연관이 없는 독립변수들 제거 (상관관계 분석)

3. Weight의 값을 인위적으로 조절 (Regulation)

  • W 값이 클수록 Curve를 그리게 되고, Overfitting의 여지가 많아짐

4. Dropout (Deep Learning)

5. 학습의 수(Epoch)를 적절하게 줄이자


< 데이터의 분류 >

▷ Training Data Set으로 학습한 후, Training Data Set으로 평가를 진행하면 안된다.

 성능이 아주 좋게 나올 수 밖에 없음!!!

 반드시 Training Data와 Test Data를 구분해서 사용해야 한다.

▷ 데이터의 종류

  1. Training Data : 학습에 사용할 데이터
  2. Validation Data : Model 개선 작업을 수행할 때 쓰이는 데이터
  3. Testing Data : 최종 모델의 Accuracy를 확립하기 위한 데이터(Model 수정에 쓰이면 안됨)

< 성능평가지표 - Confusion Matrix >

  1. Precision(정밀도) : TRUE로 분류한 것 중 정말 TRUE인 것의 대한 비율
  2. Sensitivity(민감도) : 실제 TRUE인 것 중 TRUE로 분류한 것의 비율
  3. Accuracy(정확도) : 전체 중 맞게 분류한 것의 비율

Confusion Matrix

※ Precision과 Sensitivity를 구분한 이유는??

ex) A 회사에서는 사진을 입력 받으면 그 안에 고양이가 있는지 검출하는 기술이 있다고 하자.

  • 고객은 이 기술로 99% 고양이를 검출할 수 있다고 하면 만족할 것임
  • 고객은 이 기술로 60% 고양이를 검출할 수 있다고 하면 불만족할 것임

→ 여기서, 우리는 고양이 검출 기술은 절대로 오검출은 하지 않는다고 가정하고 기술을 바라본다.

  • A 회사는 99%로 검출하지만, 오검출이 1장당 5건 발생
  • B 회사는 60%로 검출하지만, 오검출이 거의 없음

→ 어디에 응용하느냐에 따라서 A, B 중 어느 기술이 더 적합할지가 달라진다.


< Cross Validation(CV) >

▷ 만약 데이터의 양이 작다면? → Underfitting 발생

▷ 해결을 위해서 epoch 수를 늘리면? Overfitting 발생

▷ 이런 경우를 해결하기 위해서 Cross Validation 기법이 등장

▷ k-fold 기법을 통해 동작 과정을 알아보자

  • Training Data Set을 K개로 나눈다.
  • K번의 과정(fold)을 동작하며 각 과정마다 하나의 데이터 묶음이 Test Data Set이 된다.
  • 각 fold 별로 accuracy를 구하고, 평균으로 전체 accuracy를 측정한다.

K-fold Cross Validation

※ Data의 Bias가 있을 수 있으므로, 데이터를 적절히 Shuffle 한 후에 데이터를 나누어야 한다.


< Multinomial Classification >

▷ Binary Classification의 집합으로 생각할 수 있다.

▷ Linear Regression을 적용하면 각 정답에 대한 확률이 나오는데, Sigmoid 대신 각 값을 다 합했을 때 1이 되도록 변환해주는 Softmax 함수를 이용한다.

▷ Binary 에서는 0, 1로 결과가 나왔지만, multinomial 에서는 A, B, C 처럼 나오기 때문에 이를 프로그램적으로 변환해주어야 한다.

▷ One-hot encoding 으로 변환

One-hot Encoding