[Data Preprocessing] 데이터 전처리 방법론

Meosun·2024년 8월 22일

Data Pre-processing?

데이터 전처리란?

데이터 전처리는 우리가 AI 모델을 학습시키거나, 추론등의 과정에서 데이터를 정제하는 방법이다.
여러가지 요소 혹은 원인에따라 데이터 전처리를 해야하는데, 그중 몇가지 방법에 대해 설명하고자 한다.

1. Zero-Centered and Normalization

0-중심화정규화라는 방법이다.
이것은 데이터를 학습시키기전에 사용하는 방법인데, 사용하는 이유는 다음과 같다.

  • Fitting 적합성 증가
  • 오차 감소

왜 이렇게 되는지 의문이 들 수있다.
일단 분포가 널리 퍼져있으면 가중치(weight)값에 따라 큰 오차를 발생시킨다.
하지만 분포를 0-중심으로 맞추고 정규화를 하게되면 분포가 일정하게 가운데로 모이는데,
이때 가중치를 주게되면 오차가 줄어들게 되는 것이다.

따라서 이후 최적화(Optimize) 가 더 손쉽게 이루어지게 되는 것이다.

2. PCA

PCA는 주성분 분석이라고 한다.

이 방법은 통계학 전공때 배웠던 내용이다.
상관계수가 높은 항목들을 Linear 예측을 하기위해 사용한 방법인데.
원래는 상관계수가 서로 높을 경우, Linear 모델 학습시 문제가 생기기 때문에 종종 PCA로 처리한다.

PCA의 특징으로는 아래와 같다.

  1. 데이터를 정규화 하고 0-Centered 한다.
  2. 차원 축소가 가능하다.

여기서 차원 축소가 좀 의아할텐데, PCAn-features의 다른 특징들을 받아 추출한다.
이를 통해 PCA Feature가 생성되게 되는데, 이중 일부를 사용하면 축소가 가능한 것이다.

여기서 Whitening이라는 기법이 있는데, 최대한 중복이 덜 되게 입력하는 방법이다.
간단하게 설명하면 공분산 행렬을 통해 각각의 축이 같은 중요도를 갖게하여 동일한 분산을 갖게 하는 방법이다.

3. Data Augmentation

데이터가 적을때, 데이터를 확장(증가) 시키는 기법

예를 들어 이미지 데이터를 학습할 때, 많은 데이터를 구하는 것은 비용(Cost)적으로도 시간적으로도 많은 것을 소모해야한다.
이때 같은 데이터를 가지고, 효율적으로 증가 시키는 방법이 있는데 이것이 Data Augmentation이다.

그렇다면 어떻게 증가시킬 수 있을까?

  1. 데이터를 수정한다.
  2. 분류값(Class)고정(불변)한다.

위의 간단한 방법으로 할 수 있는데, 수정 방법은 아래와 같다

  • Box(Blur) 처리
  • Image Shift
  • Tint(색조) 처리
  • Horizontal Flip(좌우 반전) - 수직 반전은 데이터가 왜곡 될수 있으므로 유의
  • Random Crop - 데이터를 일부만 잘라서 인식(Translation Invariance : Pixel을 옮기더라도 같은 Class로 인식)
  • Scaling - Image Pixel 사이즈를 늘리거나 줄임
  • Random Crop and Scaling - 하단 추가 설명
  • Color Jitter - 색이나 빛 바램등의 처리를 통해 원본을 변형 시킨다.

기타 방법들

  • Translation
  • Rotation
  • Stretching
  • Shearing
  • Random Blocking
  • Add Noise
  • Mix two image
  • Apply filter

위 방법으로 데이터를 수정해서, 같은 이미지로 중복 생산 가능하다.

주의! Image의 분류값(Class)은 절대 변해서는 안된다.
이경우 다른데이터로 인식하므로 학습시 불리하다.

Random Crop and Scaling 추가 설명

해당 방법은 Random하게 일부를 잘라 Scaling 하는 방법이다.
동작 예제는 아래와 같다.
학습(Train)
1. Image 범위(Shape)에서 L을 선택한다.
L은 Shape중 작은 사이즈가 L이된다.
2. 해당 L로 L x L이 되도록 사이즈를 조정한다. (ex, L=256L=256 이면, 256256256 * 256으로 조정)
3. L보다 작은 사이즈로 Crop 하여 Sampling한다. (L=256,Lcrop=224,Sizecrop=LcropLcropL=256,L_{crop} = 224,Size_{crop}=L_{crop}*L_{crop})

테스트(Test)
1. 이미지 크기를 Scaling 하여 LLL*L의 사이즈로 만든다.
2. LcropLcropL_{crop}*L_{crop}의 사이즈로 Image를 NCrop하여 예측한다.
3. 해당 결과들의 값을 Avg하거나 Max값을 기준으로 분류한다.

위의 방법으로 비교적 적은 이미지로 학습시키고, 테스트하여 검증 할 수 있다.

profile
데이터와 AI를 잘 활용하는 Backend Developer가 되자

0개의 댓글