사용안내 및 노트

홈으로/사용안내 및 노트
제목019. Representation - Feature Engineering2020-10-25 20:40:00
작성자

☐ Representation - Feature Engineering

 ○ 모델은 input examples을 직접 보거나/듣거나/감지할 수 없다.

  - 따라서, 데이터를 모델이 이해할 수 있는 특성(features)들로 표현해야 하는데, 이러한 작업을 포괄적으로 representation이라고 한다.

  - ML에서는 코딩보다 최적의 representation이 우선이다.

 ○ Feature Engineering = Feature Extraction

  - raw data를 feature vector로 변환하는 프로세스

   · 어떤 features들이 유용할지 선별한 후 raw data를 feature vector로 변환한다.

 ○ Feature Vector

  - raw data의 변환 후 모델로 전달하는 feature 값

   · 대부분의 ML 모델은 (features x weight)와 같은 곱셈을 수행해야 하므로 features는 real-numbered vectors로 표현되어야 한다.

Representation

Raw Data

Feature Vector

0: {

house_info: {

num_rooms: 6

num_bedrooms: 3

street_name: “세종로”

num_basement_rooms: -1

...

}

}

Feature Engineering

[

6.0,

1.0,

0.0,

0.0,

0.0,

9.321,

-2.20,

1.01,

0.0,

...

]

▪raw data는 vectors 형태가 아니다.

▪따라서, raw data를 vector로 변환해야 하는데 이 과정을 feature engineering 이라고 한다.

 ○ Mapping numeric values

  - 숫자 (정수, floating-point)는 weight와 곱셈이 가능하므로 별도의 인코딩이 필요하지 않다.

   · 예) “num_rooms: 6”는 “num_rooms_feature = [ 6.0 ]”처럼 그대로 사용

 ○ Mapping categorical values

  - categorical values는 불연속(discrete)적인 strings 또는 numbers를 말하며 이들로부터 생성된 features도 불연속 특성을 유지한다.

  - street_name 이라는 feature를 가지고 예를 들어보자.

   · options: {‘종로’, ‘세종로’, ‘을지로’}

   · 이와 같이 strings으로 이루어진 feature를 vocabulary라고 한다.

   · 위 옵션들은 string이기에 weight와 곱셈을 할 수 없으므로 feature engineering을 통해 numeric values로 변환한다.

   · 위의 street_name feature에는 모든 거리명이 포함되어 있지 않으므로 ‘종로’, ‘세종로’, ‘을지로’를 제외한 다른 거리명은 ‘기타’로 정하자.

   · 조금 전 설정한 ‘기타’는 vocabulary에 포함되어 있지 않다고 해서 OOV (out-of-vocabulary) 라고 한다.

  - 이제 각 option에 숫자를 맵핑시켜준다.

   · ‘종로’는 ‘0’, ‘세종로’는 ‘1’, ‘을지로’는 ‘2’, ‘기타’는 ‘3’

  - 그런데, 이 숫자들을 모델에 직접 전달할 경우 문제가 발생할 수 있다.

   · street_name feature를 가지고 건물 가격을 예측하는 모델이 있다고 치자.

   · 하지만 위 숫자들에는 건물 가격 정보가 포함되어 있지 않아 현재 상태로는 이를 기반으로 건물 가격을 예측할 수 없다.

   · 그리고, ‘종로’와 ‘세종로’의 코너에 위치한 건물은 ‘0’과 ‘1’을 동시에 취해야 하는데 현재 상태로는 방법이 없다.

   · 이런 제약을 극복하기 위해 각 categorical features별로 binary vector를 생성한다.

  - binary vector 생성 방법

   · 해당 element(s)를 1로 하고 나머지 elements를 0으로 하는 vector를 생성한다.

   · vector의 크기는 vocabulary에 포함되어 있는 elements 수와 같다.

   · 1로 설정한 element가 한 개일 경우 one-hot encoding representation 이라 하고, 여러 개일 경우에는 multi-hot encoding representation 이라고 한다.

  - binary vector의 유용성

   · 모든 feature value (예: 거리 이름)에 대해 boolean variable을 효율적으로 생성

  - 예시) 위의 feature에서 ‘세종로’에 대해 one-hot encoding을 수행해보자.

   · ‘세종로’는 1로 하고 나머지는 0으로 하는 binary vector를 만든다.

Representation

Raw Data

Feature Vector

0: {

house_info: {

num_rooms: 6

num_bedrooms: 3

street_name: “세종로”

num_basement_rooms: -1

...

}

}

Feature Engineering

street_name feature =

[0, 1, 0, 0]

▪String Features는 one-hot encoding으로 처리할 수 있다.

▪vector 크기는 unique vocab items (거리 이름)의 수와 같다.

▪one-hot encoding으로 처리를 해서 ‘세종로’는 1로 하고 나머지는 0으로 한다.

   · 만일 건물이 종로와 세종로의 코너에 있다면 [1, 1, 0, 0]처럼 multi-hot encoding을 해주면 된다.

  - categorical feature vs binary feature

종로

세종로

을지로

기타

4개 카테고리를 가진

categorical feature:

종로

세종로

을지로

기타

종로

세종로

을지로

기타

을지로

종로

기타

세종로

을지로

binary feature로 변환

1

0

0

0

0

1

0

0

0

0

1

0

0

0

0

0

1

0

0

0

1

0

1

0

0

0

1

0

0

0

1

0

0

1

0

0

 ○ Sparse Representation

  - 거리명이 1,000,000 개가 있다고 가정하고 binary vector를 생성한다면 소수의 elements에만 1이 할당되고 나머지 대부분의 elements에는 0이 할당될 것이다.

   · 이는 공간적으로나 연산에 소요되는 시간으로 봐서 매우 비효율적인 구조이다.

  - 비효율성을 극복하기 위해서 0이 아닌 값만 저장하는 sparse representation 방식을 사용할 수 있다.