Scikit-learn의 One-hot vs Dummy 인코딩


50

범주 형 변수를 인코딩하는 방법에는 두 가지가 있습니다. 하나의 범주 형 변수에는 n 개의 값이 있습니다. 원핫 인코딩은 이를 n 개의 변수 로 변환하고 더미 인코딩은 이를 n-1 변수 로 변환합니다 . k 개의 범주 형 변수 가있는 경우 각각 n 개의 값을 갖습니다. 하나의 핫 인코딩은 kn 변수로 끝나고 더미 인코딩은 kn-k 변수로 끝납니다 .

one-hot 인코딩의 경우 인터셉트가 공선 성 문제를 유발하여 모델이 소리가 나지 않는다고 들었습니다. 누군가 " 더미 변수 트랩 "이라고합니다.

내 질문 :

  1. Scikit-learn의 선형 회귀 모델을 사용하면 인터셉트를 비활성화 할 수 있습니다. 따라서 원 핫 인코딩의 경우 항상 fit_intercept = False를 설정해야합니까? 더미 인코딩의 경우 fit_intercept는 항상 True로 설정해야합니까? 웹 사이트에 "경고"가 표시되지 않습니다.

  2. one-hot 인코딩은 더 많은 변수를 생성하므로 더미 인코딩보다 더 많은 자유도가 있습니까?

답변:


35

Scikit-learn의 선형 회귀 모델을 사용하면 인터셉트를 비활성화 할 수 있습니다. 따라서 원 핫 인코딩의 경우 항상 fit_intercept = False를 설정해야합니까? 더미 인코딩의 경우 fit_intercept는 항상 True로 설정해야합니까? 웹 사이트에 "경고"가 표시되지 않습니다.

one-hot 인코딩을 사용하는 비정규 선형 모델의 경우 인터셉트를 false로 설정하거나 완벽한 공선 성을 유발해야합니다. sklearn또한 능선 수축 페널티를 허용하며,이 경우에는 필요하지 않으며 실제로 절편과 모든 레벨을 모두 포함해야합니다. 더미 인코딩의 경우 모든 변수를 표준화 하지 않은 경우 인터셉트를 포함해야 합니다.이 경우 인터셉트는 0입니다.

one-hot 인코딩은 더 많은 변수를 생성하므로 더미 인코딩보다 더 많은 자유도가 있습니까?

절편은 추가 자유도이므로 잘 지정된 모델에서는 모두 동일합니다.

두 번째 변수에는 k 개의 범주 형 변수가있는 경우 어떻게해야합니까? k 개의 변수는 더미 인코딩에서 제거됩니다. 자유도는 여전히 동일합니까?

인터셉트 여부에 관계없이 두 범주 형 변수의 모든 레벨 을 사용한 모델에 적합 할 수 없습니다. 이진 변수 과 같이 모형에서 하나의 변수에 모든 수준을 단일 핫 인코딩 한 경우 상수 벡터와 동일한 예측 변수의 선형 조합이 있습니다.x1,x2,,xn

x1+x2++xn=1

그런 다음 모델 에 다른 범주 형 의 모든 수준을 입력하려고 하면 상수 벡터와 동일한 고유 한 선형 조합이 생깁니다x

x1+x2++xk=1

그래서 선형 의존성을 만들었습니다

x1+x2+xnx1x2xk=0

그래서 당신은 해야한다 두 번째 변수의 수준을두고 모든 라인까지 제대로.

예를 들어, 3 개의 범주 형 변수가 있으며 각 변수에는 4 개의 수준이 있습니다. 더미 인코딩에서 3 * 4-3 = 9 변수는 하나의 절편으로 작성됩니다. one-hot 인코딩에서는 3 * 4 = 12 변수가 인터셉트없이 작성됩니다. 제가 맞습니까?

두 번째는 실제로 작동하지 않습니다. 생성하는 열 디자인 행렬은 단수입니다. 설계의 특이성을 복구하려면 3 개의 개별 범주 인코딩 각각에서 하나씩 3 개의 열을 제거해야합니다.3×4=12


감사. 두 번째 변수에는 k 개의 범주 형 변수가있는 경우 어떻게해야합니까? k 개의 변수는 더미 인코딩에서 제거됩니다. 자유도는 여전히 동일합니까?
Munichong

@ChongWang 내 답변에 대한 귀하의 의견에 대한 답변을 편집했습니다.
Matthew Drury

죄송합니다. 여기서 조금 길을 잃었습니다. 예를 들어, 3 개의 범주 형 변수가 있으며 각 변수에는 4 개의 수준이 있습니다. 더미 인코딩에서 3 * 4-3 = 9 변수는 하나의 절편으로 작성됩니다. one-hot 인코딩에서는 3 * 4 = 12 변수가 인터셉트없이 작성됩니다. 제가 맞습니까? 따라서 더미 인코딩의 DF는 9-1이고 one-hot encoding의 DF는 12입니다. 맞습니까?
Munichong

@ChongWang 다시 편집했습니다.
Matthew Drury

@ MatthewDrury sklearn의 linear_model과 동일한 문제가 있습니다. 더미 인코딩 후 의사 결정 트리와 KNN은 정상적으로 작동하지만 선형 회귀는 특이점에 빠집니다. 나는 당신의 대답에서 "두 번째 변수의 레벨"을 제거해야한다는 것을 이해하지만 그것이 실제로 무엇을 의미하는지 모르겠습니다. 예를 들어 3 개의 숫자 기능과 3 개의 범주 (제조업체, 모델 및 fuel_type)가 있습니다. 하나의 제조업체가 n 개의 모델을 가질 수 있으므로 모델은 제조업체에 자연스럽게 의존합니다. 선형 회귀를 사용하려면 이런 종류의 일반적인 시나리오를 진행하는 방법은 무엇입니까?
Harvey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.