One Hot Encoding vs LabelEncoder vs DictVectorizor를 언제 사용해야합니까?


95

나는 한동안 범주 형 데이터로 모델을 구축 해 왔으며이 상황에서 기본적으로 모델을 만들기 전에이 데이터를 변환하기 위해 scikit-learn의 LabelEncoder 함수를 기본적으로 사용합니다.

나는 사이의 차이 이해 OHE, LabelEncoder그리고 DictVectorizor그들이 데이터에 무엇을하고 있는지의 관점에서,하지만 다른 통해 하나 개의 기술을 사용하도록 선택할 수 있습니다 때 나에게 명확하지 않습니다 것입니다.

어떤 알고리즘이 다른 알고리즘과 관련하여 장단점이있는 특정 알고리즘이나 상황이 있습니까?


2
참조에 AN6U5의 대답은 ,이 문 :> 아직 잘하고 LabelEncoder이 적은 디스크 공간을 사용하여 값을 저장하는 데 사용할 수있는 범주 변수로 작업 할 수 있습니다 의사 결정 나무와 임의 숲 같은 알고리즘이있다. LabelEncoder를 사용하여 범주를 숫자로 변환하지 않으면 의사 결정 트리가 임의의 값으로 분할을 수행하여 매핑이 임의적이므로 실제로 의미가 없습니다.
Nico

1
Nico, AN6U5가 말하는 것은 나무가 개, 고양이, 마우스 또는 1,2,3으로 나뉘고 "고양이"대 "2"의 의미는 중요하지 않기 때문에 잘 작동하는 결정 트리를위한 것이라고 생각합니다. 나무 (분할 방식에 대해 생각하십시오). 로지스틱 회귀와 같은 경우 가중치 * 값을 곱하여 값이 방정식의 일부이므로 dog : 1과 cat : 2에 숫자 1 * 2 관계가없는 경우 훈련 문제와 체중 문제가 발생할 수 있습니다 (물론 그것은 여전히 ​​충분한 훈련 사례와 시대와 함께 작동 할 수 있습니다).
더그 F

답변:


124

LabelEncoder 또는 DictVectorizor가 유용한 경우가 있지만 이는 서수 때문에 내 의견으로는 상당히 제한적입니다.

LabelEncoder는 [dog, cat, dog, mouse, cat]를 [1,2,1,3,2]로 바꿀 수 있지만 부과 된 규칙은 개와 마우스의 평균이 고양이임을 의미합니다. 여전히 의사 결정 트리 및 임의 포리스트와 같은 범주 형 변수를 사용할 수있는 알고리즘이 있으며 LabelEncoder를 사용하여 적은 디스크 공간을 사용하여 값을 저장할 수 있습니다.

1- 핫 인코딩은 결과가 서수보다는 이진이고 모든 것이 직교 벡터 공간에 있다는 이점이 있습니다. 단점은 높은 카디널리티의 경우 피처 공간이 실제로 빠르게 터져서 차원의 저주와 싸우기 시작한다는 것입니다. 이 경우, 나는 일반적으로 차원 축소를 위해 1- 핫 인코딩과 PCA를 사용합니다. one-hot과 PCA의 신중한 조합이 다른 인코딩 체계를 능가하는 경우는 거의 없습니다. PCA는 선형 오버랩을 발견하므로 자연스럽게 유사한 기능을 동일한 기능으로 그룹화하는 경향이 있습니다.


1
대단히 감사합니다-이것은 매우 유용하며 많은 의미가 있습니다. 특정 / 가장자리 경우에 사용하는 다른 인코딩 체계가 있습니까? 다른 기능에 대해 다른 인코딩 체계를 사용하는 상황에 처한 적이 있습니까?
anthr

20

AN6U5 가 매우 좋은 대답을 했지만 향후 참조를 위해 몇 가지 사항을 추가하고 싶었습니다. OHE ( One Hot Encoding ) 및 Label Encoding을 고려할 때 빌드하려는 모델을 이해하고 이해해야합니다. 우리가 고려할 모델의 두 가지 범주는 다음과 같습니다.

  1. 트리 기반 모델 : 그라디언트 부스트 결정 트리 및 랜덤 포레스트.
  2. 비 트리 기반 모델 : 선형, kNN 또는 신경망 기반.

트리 기반 모델을 구축 할 때 OHE를 적용 할시기와 레이블 인코딩을 적용 할시기를 고려해 보겠습니다.

다음과 같은 경우에 OHE를 적용합니다.

  1. 라벨 인코딩에서 서로 가까운 값이 닫히지 않은 대상 값 (비선형 데이터)에 해당하는 경우
  2. 범주 형 피쳐가 서 수가 아닌 경우 (개, 고양이, 마우스).

다음과 같은 경우에 라벨 인코딩을 적용합니다.

  1. 범주 형 기능은 서수입니다 (Jr. kg, Sr. kg, 초등학교, 고등학교 등).
  2. 비슷한 범주에 가까운 레이블을 할당 하는 레이블 인코더를 만들 수 있습니다 .
  3. 데이터 세트의 범주 형 피쳐 수가 많은 경우 : 값이 큰 범주 형 피쳐를 원핫 인코딩하면 (1) 높은 메모리 소비와 (2) 범주 형이 아닌 피쳐가 모델에서 거의 사용되지 않는 경우가 발생할 수 있습니다. 희소 행렬을 사용하는 경우 첫 번째 경우를 처리 할 수 ​​있습니다. 두 번째 경우는 기능의 하위 집합 만 사용하여 트리를 작성하는 경우 발생할 수 있습니다. 예를 들어, 9 개의 숫자 기능과 100 개의 고유 한 값을 가진 1 개의 범주 형이 있고 해당 범주 형 기능을 1- 핫 인코딩 한 경우 109 개의 기능이 제공됩니다. 기능의 하위 집합만으로 트리를 구축 한 경우 초기 9 개의 숫자 기능은 거의 사용되지 않습니다. 이 경우이 서브 세트의 크기를 제어하는 ​​매개 변수를 늘릴 수 있습니다. xgboost에서는 sklearn의 Random Forest max_features에서 colsample_bytree라고합니다.

@ AN6U5가 제안한대로 OHE를 계속하려면 PCA를 OHE와 결합 할 수 있습니다.

비 트리 기반 모델을 구축하는 동안 OHE 및 라벨 인코딩을 적용 할시기를 고려할 수 있습니다.

라벨 인코딩을 적용하려면 라벨 인코딩을 효과적으로 활용하기 위해 기능과 대상 간의 종속성이 선형이어야합니다.

마찬가지로, 의존성이 비선형 인 경우 OHE를 사용하는 것이 좋습니다.

참고 : 일부 설명은 Coursera 의 데이터 과학 경쟁 에서 이기는 방법 에서 참조되었습니다 .


매우 직관적 인 설명. "spilts"가 아닌 "splits"가 아니어야합니까?
dzieciou

0

LabelEncoder는 서수 데이터 용이며 OHE는 공칭 데이터 용입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.