NN에서 Categorical Variables에 대해서는 어떻게 해야할까?

2019. 5. 6. 15:59관심있는 주제/뉴럴넷 질문

728x90

현재 Neural Network는 주로 이미지나 비디어 같이 Unconstructed Data에 대해서 Convolution을 사용해서 feature의 Parameter 개수를 축약하면서 Wide한 구조로 만들 수 데이터에 대한 Representation을 layer에서 잘 해줘서 된다고 생각한다. 

 

하지만 현재 나는 주로 그런 Unconstructed Data 보다는 주로 tabular data에 대해서 많이 다루고 있다.

일단 Neural Network는 깡패이기 때문에 왠만하면 다른 알고리즘과 비슷한 성능이 잘 나온다. 

하지만 비슷한 성능은 나오지만, 설명력이 좋지 못하니 굳이 tree-based 알고리즘과의 차이를 크게 내지 못하니, 

굳이 사용해나 되기도 싶다.

 

최근에 보니 그래서 tree 기반과 neural network를 잘 결합한 논문들이 나오고 있었다.

> 19년에 나온 TABNN A UNIVERSAL NEURAL NETWORK Solution 이러한 논문이 있는데...(코드좀.....)

 

그러한 부분에 대해서도 공부를 해서 문제에 적용해보려고 한다. 

 

아무튼 쓸데없는 소리는 각설하고,  원래 주제처럼 Categorical variable을 어떻게 처리할지에 대해서 생각해보니 몇가지 글이 있어서 공유를 하려고 한다.

 

만약 한변수가 있는데, 이 변수가 미국의 주를 나타낸다고 하자. 그러면 총 50개가 나온다.

하지만 이 주를 숫자로 변환한다고하면, Alabama (1)California(2) 라고 했을 때 1 < 2 라는 의미로 줄 수 있겠는가? 

이렇게 주지 못하니, 우리가 잘 알고 있는 방법인 onehot이라는 방법을 통해서 dummy variable로 바꿔줄 수 있다. 

 

> 문제는 만약 이러한 Categorical data가 많다면? 데이터의 차원은 더 커지면서 Curse of Dimensionality(차원의저주)를 발생시키지 않을까?! 뿐만 아니라 Sparse 해져서 0이 많아지기 때문에 분석이 잘 안되지 않을까?!

 

그러면 모델이 더 성능을 떨어지게 하는 원인이 되지 않을까라는 게 나의 생각이고,

여러가지 찾다보니 다음과 같은 기존의 방법과 새롭게 알게된 방법만 소개하려고 한다.

 

1. Using categorical data in machine learning with python Part1

  • Method 1: Encoding to ordinal variables
  • Method 2: One hot encoding (or dummy variabales)
  • Method 3: Feature hashing (a.k.a the hashing trick)
    • from sklearn.feature_extraction import FeatureHasher

2. Using categorical data in machine learning with python: from dummy variables to Deep category embedding and Cat2vec -Part 2

 

위의 첫번째 방법은 다들 아시는 방법이니 패스하고

2번째 방법에 대해서 이야기 하고자한다. 

 

이 방법은 word2vec에 아이디어를 차용해서 kaggle에 시도한 방법이라고 한다. 

내가 논문을 보고 그냥 몇마디로 정리를 해본다면

word2vec은 단어들의 유사할수록 같이 붙어있게 할 수 있다.

그래서 여기서 cat2vec은 더 높은 차원의 dummy variable 낮은 차원으로 잘 축소하면서 sparse를 없애게 할 수 있고,  target에 따라서 잘 clustering 된 embedding 된 matrix를 얻을 수 있게 된다는 말 같다.

> 아닐 수도 있다. 아니면 피드백 주셔서 바로 잡아주시면 정말 감사하겠습니다. ㅎㅎㅎㅎㅎ

 

아무튼 이런 방법을 통해, dummy로 인해 쓸데없이 고차원이 된 데이터를 저차원으로 줄이면서 sparse한 것을 dense하게 만들어 주는 좋은 효과를 얻을 수 있다! 

> 나는 이 방법이 굉장히 매력적이라고 생각한다. 

728x90