의사 결정 트리의 범주 형 기능을 코딩하는 모범 사례?


13

선형 회귀 분석을 위해 범주 형 피쳐를 코딩 할 때 규칙이 있습니다. 더미의 수는 공선 성을 피하기 위해 총 레벨 수보다 하나 작아야합니다.

의사 결정 트리에 대해 비슷한 규칙이 있습니까 (태그, 부스트)? 파이썬의 표준 연습은 n레벨을 n인형 (sklearns ' OneHotEncoder또는 Pandas' pd.get_dummies) 으로 확장 하여 저에게 최적이 아닌 것처럼 보이기 때문에 이것을 묻습니다 .

의사 결정 트리의 범주 형 기능을 코딩하는 모범 사례로 무엇을 제안 하시겠습니까?

답변:


12

선형 회귀와 달리 완벽한 공선성에 대해 걱정할 필요가 없기 때문에와 n반대로 레벨 을 가질 수 있음을 이해하는 것 같습니다 n-1.

(R 관점 에서이 문제를 겪고 있지만 Python에서도 동일하다고 가정합니다.) 1) 사용하는 패키지 및 2) 요소 수준의 수와 같은 몇 가지 사항에 따라 다릅니다.

1) R randomForest패키지를 사용하는 경우 <33 팩터 레벨이 있으면 원하는 경우 하나의 기능으로 남겨 둘 수 있습니다. R의 임의 포리스트 구현에서는 분할의 한쪽에 어떤 요인 수준이 있어야하고 다른쪽에 어떤 요인 수준이 있는지 확인하기 때문입니다 (예 : 5 개의 수준이 왼쪽에 함께 그룹화되고 7이 그룹화 될 수 있음). 오른쪽에 함께). 범주 형 피처를 n더미 로 분리하면 알고리즘에이 옵션이 없습니다.

분명히 사용중인 패키지가 범주 형 기능을 처리 할 수 ​​없다면 n더미 변수 를 만들어야 합니다.

2) 위에서 언급했듯이 R의 임의 포리스트 구현은 32 요인 수준 만 처리 할 수 ​​있습니다. 이보다 많은 경우 요인을 더 작은 하위 집합으로 나누거나 각 수준에 더미 변수를 만들어야합니다.


1
감사! 카테고리 기능 randomForest이 자동으로 코딩 되는 R에서 모델링하지 않는 한 n공선 성이 RF의 문제가 아니기 때문에 인형 과 함께 가야 합니까?
Sergey Bushmanov

3
32 수준 이상의 이진 인코딩 범주는 트리에서 동작이 약간 다릅니다. RF는 여러 수준의 요인의 단일 열을 선택하는 대신이 이진 열 중에서 선택하기 때문입니다. 이 미묘한 차이는 이진 열의 분할이 요인 열의 분할에 비해 정보가 적다는 것을 의미합니다. (1 / {2,3}, {2,1} / 3 중 하나만 선택할 수 있기 때문입니다. 등)
Sycorax는 분석 재개 모니카 말한다

@ user777 변수가 32 개 이상인 문제는 아닙니다. 파이썬에서 "그룹화 된"범주 변수를 가지지 않는 문제가 있습니다 sklearn... 실제로 "두께 화 된"변수가 "그룹화 된"범주 형 변수보다 성능이 나빠진다는 증거 (실제 경험, 연구 등)가 있습니까
Sergey Bushmanov

1
이론적으로는 비 그룹화 성능이 약간 떨어질 것으로 예상 할 수 있습니다. 모델의 유연성이 떨어지기 때문입니다. 그룹화 된 경우 해당 기능을 그룹화하지 않은 것으로 처리하는 것이 더 낫다면 모델은 한 그룹을 한쪽에 배치하고 나머지 그룹을 다른쪽에 배치하여 그렇게 할 수 있습니다. 그러나 실제로 많은 차이가있는 경우 (특히 RF가 많은 나무를 생성하는 경우)
Tchotchke

2
언급 한 것처럼 많은 요소 수준 (> 15)이 느린 기능을 사용하는 randomForest 구현은 있지만 평범한 모델 성능을 제공합니다. 가능한 많은 수의 스플릿이 앙상블에서 나무의 의도 된 역 상관을 감소시킬 것으로 생각합니다. extraTrees 및 Rborist는 각 노드에서 catagorical split의 하위 샘플 만 시도합니다. 그것은 장식과 확실히 속도에 도움이 될 수 있습니다. 따라서 "randomForest는 모든 분할 시도"와 "sklern dummy-variable은 1-vs-rest 분할 만 시도"사이의 다양한 솔루션이 가능합니다. 또한 많은 수준을 더 적은 수준으로 나누는 다른 클러스터링이 유용 할 수 있습니다.
Soren Havelund Welling

4

대상 / 임팩트 인코딩이라고하는 범주 형 변수를 처리하는 또 다른 방법이 있습니다.

이 체계에서 아이디어는 값이 범주를 공유하는 모든 행에 대한 대상 변수의 평균 인 단일 부동 열을 사용하여 기능을 인코딩하는 것입니다. 이 기능은 피처 내에 순서 관계를 적용하므로 (즉, 카테고리 오른쪽의 값이 왼쪽의 값보다 높은 평균 응답을 가짐) 예측 변수 공간을 쉽게 분할 할 수 있으므로 트리 기반 모델에 특히 유용합니다.

여기 주제에 대한 좋은 설명이 있습니다 :
https://towardsdatascience.com/why-you-should-try-mean-encoding-17057262cd0

다음은 원래 인코딩을 제안한 논문에 대한 링크입니다. http://helios.mm.di.uoa.gr/~rouvas/ssi/sigkdd/sigkdd.vol3.1/barreca.pdf

카운트가 적은 카테고리의 평균을 추정하지 않으려면 더 자세한 내용이 있으며 CatBoost라는 또 다른 모델이 있습니다.이 인코딩으로 도입 된 바이어 싱에 대한 솔루션을 제안하지만 내 경험상 높은 카디널리티 범주 변수를 인코딩하는 간단하고 매우 유용한 방법입니다 .

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