이번 포스트를 통해서 우리는 수집된 데이터를 어떻게 정제하여 머신러닝에게 학습시킬 지, 특성을 추출하는 방법에 대해서 이야기해 보겠습니다.


원시 데이터를 특성에 맵핑(Mapping Raw Data to Features)


위의 그림에서 왼쪽 부분은 수집된 데이터의 원본인 원시 데이터(Raw Data)입니다. 오른쪽은 실수 벡터로 표현된 특성 벡터(Feature Vector)입니다. 이렇게 원시 데이터로 부터 머신러닝에 적합한 데이터(모델을 학습 시킬 예)로 정제하는 것을 특성 추출(Feature Engineering)이라고 합니다.


보통 머신러닝 프로그래머는 특성을 추출하는데 전체 시간의 75% 정도를 할애합니다.


숫자 값 맵핑(Mapping numeric values)

머신러닝의 모델을 학습 시킬 때 부동 소수점 값을 이용하므로 원시 데이터가 정수 및 부동 소수점인 경우 따로 인코딩을 할 필요는 없습니다.

위의 그림과 같이 이미 실수인 num_rooms의 값을 오른쪽과 같이 6.0의 부동 소수점의 값으로 변환할 필요는 없습니다.


문자열 값 맵핑

머신러닝에서는 문자열 값은 학습할 수 없는 데이터입니다. 그래서 우리는 특성 추출(Feature Engineering)을 통해 필요한 문자열의 값을 숫자로 변환할 필요가 있습니다.



위와 같이 우리가 학습하고 싶은 문자열만 1로 설정하고 다른 문자열을 0으로 하는 원-핫 인코딩 방식으로 치환합니다.


원-핫 인코딩(One-Hot Encoding)이란?

일반적으로 문자열을 표현할 때 사용하는 방식으로, 하나의 요소만 1로 설정하고, 다른 요소들은 모두 0인 벡터를 말합니다.


범주형 값 매핑(Mapping categorical values)

범주형이란 배열로 표현되는 특성을 말하며, 인덱스와 같은 숫자로 치환하여 맵핑 합니다. 아래와 같은 나라 이름이 주어졌다고 하겠습니다.

주어진 나라를 나타내는 숫자로 치환하여 사용할 수 있을 겁니다. 아래 처럼 말이죠.

  • Netherlands => 0
  • Belgium => 1
  • Luxembourg => 2

하지만, 머신러닝 모델에서는 일반적으로 각 특성을 별도의 Boolean 값으로 표현 합니다. 예를 들면, 위의 나라 이름이 아래 처럼 표현됩니다.

  • x1: Is Netherlands? (True or False)
  • x2: Is Belgium? (True or False)
  • x3: Is Luxembourg? (True or False)


+ Recent posts