여기에서 멈추고 이 배열을 분류기에 주입하면 범주형 데이터를 다룰 때 흔히 저지르는 실수 중 하나가 됩니다. 문제가 무엇인지 눈치챘나요? 컬러 값에 어떤 순서가 없지만 이전 장에서 다루었던 일반적인 분류 모델은 green이 blue보다 크고 red는 green보다 크다고 가정할 것입니다. 이 가정이 옳지 않지만 분류기가 의미 있는 결과를 만들 수 있습니다. 그렇지만 이 결과는 최선이 아닐 것입니다.
이 문제를 해결하기 위한 통상적인 방법은 원-핫 인코딩(one-hot encoding) 기법입니다. 이 방식의 아이디어는 순서 없는 특성에 들어 있는 고유한 값마다 새로운 더미(dummy) 특성을 만드는 것입니다. 여기에서는 color 특성을 세 개의 새로운 특성인 blue, green, red로 변환합니다. 이진 값을 사용하여 특정 샘플의 color를 나타냅니다. 예를 들어 blue 샘플은 blue = 1, green = 0, red = 0으로 인코딩됩니다. 사이킷런의 preprocessing 모듈에 구현된 OneHotEncoder를 사용하여 이런 변환을 수행할 수 있습니다.
>>> from sklearn.preprocessing import OneHotEncoder
>>> X = df[['color', 'size', 'price']].values
>>> color_ohe = OneHotEncoder()
>>> color_ohe.fit_transform(X[:, 0].reshape(-1, 1)).toarray()
array([[0., 1., 0.],
[0., 0., 1.],
[1., 0., 0.]])