본문 바로가기
Computer Science/AL, ML

[네트워크 성능] Dataset

by Gofo 2022. 4. 20.

Machine Learning & Dataset

네트워크가 좋은 성능을 내기 위해서는 데이터셋의 구성이 잘 되어야 한다.

데이터셋을 잘 선택하고 구성하면 네트워크의 성능과 training 속도를 매우 높일 수 있다.

 

Dataset 종류

  • training set
  • development set = validation set
  • test set

 

Issue

  • disjoint (no overlap)
    • 구성할 때 주의할 점은 training/development, test set 간에 중복되는 set(sample)이 존재해서는 안된다.
    • 중복되는 sample이 있을 경우 overfitting이 발생할 수 있다.
  • mismatched train/test distribution
    • training set과 dev/test의 distribution이 유사하지 않으면 결과가 달라진다.
    • 적당히 섞어서 training set과 dev/test set의 distribution을 맞춰야 한다.
      • test set은 맞추지 않더라도 dev set은 맞춰야 한다.
    • 예시 : 극단적인 경우로 고양이 사진으로 training set을 만들고 강아지 사진으로 test set을 만들면 안된다.

 


해결 방법

Splitting Data

전체 data set을 split해서 training, development, test set을 구성하기도 한다.

 

  • 일반적인 경우
    • training : test = 70:30
    • training : development : test = 60 : 20 : 20
  • 빅데이터(데이터가 많은 경우)
    • training : dev/test = 99:1
    • dev/test은 검증용이기 때문에 많을 필요는 없다.

 

K-Fold Cross-Validation

Training sample의 수가 적을 때 주로 사용하는 방법이다.

 

데이터셋이 적으면 결과가 일관성이 없다.

운이 좋으면 결과가 좋고, 운이 없으면 결과가 좋지 않을 수 있다.

 

이를 방지하기 위해서 K-fold cross-validation은 매 iteration마다 train과 test의 조합을 달리해서 테스트한다.

결과로 모든 iteration의 평균을 본다.

Independent test set에 대해 estimated prediction error를 보는 것이다.

 

  1. 전체 dataset을 k개의 fold로 랜덤하게 나눈다.
    • k=5, 10을 주로 사용한다.
  2. 첫번째 fold부터 시작해서 i번째 fold를 test set으로 사용하고 나머지를 trainset으로 사용한다.
  3. K번을 반복하고 각 iteration마다 다른 fold를 test set으로 선택한다.
  4. 모든 iteration이 끝나고 K개에 대한 error(loss/cost)에 대한 평균을 취하면 estimated test error가 된다.

 

Data Agumentation

여러 상황에 따른 데이터를 직접 다 구하기는 비용과 시간이 너무 많이 든다.

이를 극복하기 위해 소프트웨어적으로 데이터를 증가시키기 위해 아래와 같이 기존 데이터를 변형시킨다.

 

요즘에도 거의 대부분 사용하는 기법이다.

 

다만, 너무 심하게 변형시켜서 원본과 너무 멀어지게 하면 안된다.

 

 

 

'Computer Science > AL, ML' 카테고리의 다른 글

[네트워크 성능] HyperParameter  (0) 2022.04.20
[네트워크 성능] Bias, Variance  (0) 2022.04.20
네트워크의 성능  (0) 2022.04.20
Deep Neural Network의 Propagation  (0) 2022.04.20
Neural Network에서 Layer 수 vs. Unit 수  (0) 2022.04.20

댓글