잘 설정된 머신 러닝 시스템의 대부분에서 범주 형 변수는 자연스럽게 처리됩니다. 예를 들어 R에서는 요인을 사용하고 WEKA에서는 공칭 변수를 사용합니다. scikit-learn에서는 그렇지 않습니다. scikit-learn에서 구현 된 의사 결정 트리는 숫자 기능 만 사용하며 이러한 기능은 항상 연속 숫자 변수 로 해석됩니다 .
따라서 문자열을 해시 코드로 바꾸는 것은 피해야합니다. 연속적인 숫자 피처로 간주하면 사용하는 코딩이 데이터에 존재하지 않는 순서를 유발할 수 있습니다.
한 가지 예는 [ 'red', 'green', 'blue']를 [1,2,3]으로 코딩하는 것입니다. 'red'가 'blue'보다 낮은 이상한 것들을 생성하며 평균이 'red'인 경우 그리고 '파란색'은 '녹색'을 얻게됩니다. [1,2,3]으로 [ 'low', 'medium', 'high']를 코딩 할 때 또 다른 미묘한 예가 발생할 수 있습니다. 후자의 경우에는 의미가있는 순서가있을 수 있지만, '중간'이 '낮음'과 '높음'의 중간에 있지 않을 때 미묘한 불일치가 발생할 수 있습니다.
마지막으로 귀하의 질문에 대한 답변은 범주 형 기능을 여러 이진 기능으로 코딩하는 것 입니다. 예를 들어, [ 'red', 'green', 'blue']는 각 범주에 대해 하나씩 열이 3 개인 열로 코딩 할 수 있습니다 (범주가 일치하면 1, 그렇지 않으면 0). 이를 one-hot-encoding , 이진 인코딩, one-of-k-encoding 또는 기타라고합니다. 범주 형 기능 인코딩 및 기능 추출-해싱 및 받아쓰기에 대한 설명서를 여기에서 확인할 수 있습니다 . 분명히 하나의 핫 인코딩은 공간 요구 사항을 확장하고 때로는 성능도 저하시킵니다.