* 노란 글씨 : 이해 잘 안 됨
* 파란 글씨 : 이해 후 재서술
원래 오늘 공부 주제가 ‘특수 데이터 처리하는 다양한 방법’인데, 특수 데이터라는 게 뭘 말하는 건지 잘 모르겠어서 우선 내가 아는 딥러닝에 사용하는 데이터들부터 살펴보기로 했다.
데이터 유형에 따른 분류
내가 다룰 수 있는 데이터와 다룰 수 있는지 여부에 상관 없이 존재를 아는 데이터의 목록을 써보자. 무슨 검색어를 써야 하는지도 감이 안 잡혀서 내가 아는 내용으로 썼다.
- 주로 csv 파일 형식으로 사용되는 수치/범주형 데이터 → 분류/회귀
- 서로 연관을 갖지 않는 실수/정수 값 : 예를 들어 어떤 광물의 함량, 무언가의 무게, 어떤 것의 개수 등 각각의 샘플이 가질 수 있는 값을 말한다. 모든 샘플이 각자의 값을 갖지만 서로 다른 샘플 사이에 상관 관계는 없다. 이 값이 출력 데이터로 사용된다면 회귀 문제가 된다. 입력 데이터로 사용될 경우 시도할 수 있는 처리는 정규화(Standardization, 데이터를 표준정규분포로 만듦), 표준화(Normalization, 값의 범위를 0~1로 만듦), 로그 취하기 등이 있다.
- 일정한 몇 가지 범주 내의 값을 가짐 : 샘플이 갖는 값이 객관식인 것을 말한다. 예를 들면 성별, 어떤 조건에 대한 해당 여부 등이 있다. 이 값이 출력 데이터로 사용된다면 분류 문제가 된다. 입력 데이터로 사용될 경우 시도할 수 있는 처리는 레이블 인코딩, 원 핫 인코딩 등이 있다.
- 일정한 순서가 존재하는 값 : 시계열 데이터라고 부르는 값들을 말한다. 주로 시간적 순서와 관계가 있다. 말 그대로 날짜나 시각 등을 말한다. 자연어라 부르는 텍스트도 순서가 있기 때문에 시계열 데이터에 포함되지만 일단 여기에는 포함하지 않았다. 입력 데이터로 사용될 경우 LSTM이라는 신경망 구조를 사용하고, 출력 데이터로 사용되는 경우는 아직 내가 해본 적이 없지만 이전 주차에서 공부한 내용 중 Cox 비례 회귀에서 시간이 종속 변수로 사용된다고 배웠다.
- (참고)시간과 시각 : 네이버 사전에 의하면 시간은 “하루의 24분의 1이 되는 동안을 세는 단위”, 시각은 “시간의 어느 한 시점” 또는 “짧은 시간”을 의미한다고 한다. 다시 말해 시작과 종료가 있는 기간의 의미라면 시간, 특정 지점을 지칭하는 의미라면 시각이라고 말하면 된다.
- 이미지/영상 데이터 → 분류, 생성
- 분류 : 이 이미지가 강아지인가 고양이인가? 같이 객관식 질문에 대답하는 문제를 말한다. 이미지 크기 조절, 증강 등을 시도할 수 있다.
- 생성 : 원본 이미지와 유사하지만 실제가 아닌 가짜 이미지 만들기(GAN), 원본 이미지의 특징을 드러내는 이미지 만들기(오토인코더), 원본 이미지와 결과 이미지의 짝을 학습해 임의의 이미지로부터 결과 이미지 만들기(pix2pix), 특정 부류의 이미지의 스타일을 학습해 다른 이미지를 해당 부류의 이미지처럼 조작하기(CycleGAN) 등 다양한 생성 모델이 있고, 다양한 것을 할 수 있다. 전처리는 모델의 종류에 따라 다르지만 보통은 이미지 크기 조절 외에는 잘 안 하는 것 같았다.
- 자연어 → 분류, 생성
- 분류 : 이 텍스트 슬퍼보이니 기뻐보이니 아니면 중립? 같이 객관식 질문에 대답하는 문제를 말한다. 주 사용 예시로 텍스트 감정 분석이 있다. 문장부호/특수기호 제거, 토큰화, 패딩 등을 할 수 있다.
- 생성 : 아직 직접 해본 적은 없다. 텍스트 번역, 감정 키워드 추출 등을 하는 것 같다. 전처리 과정은 비슷하리라 생각한다.
처리 과정에 따른 분류
내가 찾아본 데이터 처리 과정은 다음과 같다.
- Data Cleaning : 결측값/불필요한 값 처리
- 불필요 데이터 처리 : 결측값 삭제/대체, 속성 삭제. 결측값은 평균값, 중간값, 앞뒤 샘플의 값, 최빈값 등으로 채울 수 있고 보간으로 채울 수도 있다. 속성은 결측값 비율이 너무 높아 채워도 손해이거나 전체 학습과 관련이 없다고 판단되는 것을 삭제한다.
- Handling Text and Categorical Attributes / Representation transformation : 숫자가 아닌 데이터 숫자로 바꾸기
- 데이터에 텍스트가 있거나 범주형 데이터일 때 이를 숫자로 바꿔준다. 서로 연관이 있거나 순서가 있다면 정수로만 바꿔도 되고, 그렇지 않다면 원 핫 인코딩을 권장한다. 원 핫 인코딩의 필요성은 다른 주차에서 이미 공부했다. 텍스트(자연어)는 토큰화, 임베딩 등을 한다.
- Custom Transformers : 데이터에 특정 알고리즘 적용해 변환하기
- 예를 들어 주택의 평수와 거주민의 수가 있을 때 각 주택에서 평당 거주민의 수를 계산하는 것.
- Feature Scaling / Feature tuning : 데이터의 범위 또는 분포를 특정 형태로 바꾸거나 제한하기
- 정규화(Standardization) : 정규 분포를 따르는 데이터를 표준정규분포로 만든다. 각 값에서 평균 빼고 분산으로 나누기.
- 최대-최소 정규화 : 데이터의 분포가 정규 분포를 따르지 않아도 사용할 수 있다. 각 값에서 최솟값을 빼고 최댓값과 최솟값의 차로 나누기. 이 방법을 응용해 데이터를 특정 범위 이내의 값으로 제한할 수 있다.
- 로그 취하기 : 각 값에 로그를 취한다. 값의 분포가 상당히 치우쳤거나, 단위가 너무 클 때 사용할 수 있다. 첨도나 왜도가 너무 클 때 이를 개선하는 효과가 있다.
- Instance selection & partitioning : 학습셋, 테스트셋 분리
- 기본적으로는 학습용, 중간 테스트용, 성능 평가용 데이터를 분리하는 것을 말한다. 단순히 분할만 할 수도 있지만 데이터의 분포 비율에 맞춰서 샘플링할 수도 있다. 이것을 stratified partitioning이라고 한다, 라고 원문에 적혀있었다. 특정 데이터가 너무 적을 때 오버샘플링을 하는 과정도 포함된다.
- Feature extraction : 전체 속성의 수를 줄이거나 해시값으로 변환하여 더 효율적인 속성을 사용
- 차원 감소 기법을 사용한다고 하는데, 이해하지는 못했다. 오늘 전공 시험만 5시간 정도 보고 나서 + 아파서 낮잠까지 자고 나서 남은 기력으로 공부하는 거라 아주 새로운 걸 배우기는 힘들다(변명 맞음). ‘차원 감소’라고 하니 임베딩도 이 기법의 일종이지 않을까 싶긴 한데, 내가 개념을 이해하지 못해서 그냥 혹시나 하고 추측만 할 뿐이지 더 생각은 못하겠다. 요점은 데이터를 변환하거나 압축해서 더 작은 사이즈로, 더 효율적으로 사용할 수 있도록 만드는 게 목적인 것 같다.
- Feature selection : 여러 가지 속성 중 사용할 속성 고르기
- 말 그대로 딥러닝 모델에게 제공할 속성을 고른다. 기준은 여러 가지 있을 수 있지만 나는 주로 상관 관계 값을 본다. 판다스의 데이터프레임이 제공하는 상관 관계 값은 절댓값이 작을 수록 관계성이 낮음을 나타낸다. 이를 이용해 예측해야 할 결과 값과 별로 상관없는 속성을 골라 삭제한다.
- Feature construction : 기존 속성을 기반으로 여러 가지 기법을 이용해 새로운 속성 만들기
- 원문에서는 “기존의 피처를 기반으로 polynomial expansion 이나, feature crossing 등의 기법을 이용하여 새로운 피처를 만들어낸다.” 라고 하는데, 모르는 단어가 둘이나 있고 그게 문장에서 가장 중요한 말이라 이해를 못했다. 내일 또 스터디 있는데 그때 복습하겠습니다..
- Transformation Pipelines : 데이터 전처리 과정 자동화
- 위의 과정들을 특정 라이브러리를 이용해 하나의 객체로 선언한다거나 하는 방법으로 데이터마다 일일이 같은 과정을 반복하지 않게 해줌.
참고 자료
[1] 머신러닝 (3) - 데이터 전처리, https://davinci-ai.tistory.com/15
[2] [GCP] 머신러닝 파이프라인에서 데이터 변환, https://medium.com/google-cloud-apac/gcp-머신러닝-파이프라인에서-데이터-변환-da834f3dff48