41 개 [0에서 40 개까지]의 피쳐가있는 데이터 세트가 있으며 그 중 7 개가 카테고리입니다.sklearn의 범주 기능을 인코딩하는 방법은 무엇입니까?
- 문자열 유형의 서브 세트 (열 - 기능 1, 2, 3)
- 바이너리 형식으로 0 또는 1 INT 형의 서브셋합니다 (칼럼 -이 무조건 세트는 두 개의 서브 세트 나누어 져 특징 6, 11, 20, 21)
또한 열 기능 1, 2 및 3 (문자열 유형)은 각각 카디널리티 3, 66 및 11을 갖습니다. 이 컨텍스트에서 지원 벡터 컴퓨터 알고리즘을 사용하도록 인코딩해야합니다. 이것은 내가 가지고있는 코드입니다 : [I 위의 노출 된 이유] DictVectorizer()
또는 OneHotEncoder()
을 사용하는 것이 좋습니다 경우
import numpy as np
import pandas as pd
from sklearn import preprocessing
from sklearn import feature_extraction
df = pd.read_csv("train.csv")
datanumpy = df.as_matrix()
X = datanumpy[:, 0:40] # select columns 1 through 41 (the features)
y = datanumpy[:, 41] # select column 42 (the labels)
나도 몰라, 그리고 주로하는 방법의 관점에서 그들을 [사용 코드]에 내가 가지고있는 X
매트릭스가 있습니다. 또는 단순히 문자열 유형의 하위 집합에서 각 카디널리티에 숫자를 할당해야합니까 (카디널리티가 높기 때문에 기하 급수적으로 기하학적 공간이 커질 수 있습니다)?
편집 INT 타입의 부분 집합에 대한 나는 최선의 선택은 그들이 문제 (있는 인코더를 통과하지 못한) 문자열 형식의 집합 지속으로 열 기능을 유지하는 것입니다 추측 높은 카디널리티. 당신은 메모리 오버 플로우를 얻거나 그 다음 카디널리티를 줄일 너무 느린 경우
df = pd.get_dummies(df, drop_first=True)
:
top = df[col].isin(df[col].value_counts().index[:10])
df.loc[~top, col] = "other"
다른 'DataFrame'개체 (예 : 기차 및 테스트) 간의 일관성을 보장하지 않기 때문에 이는 받아 들일 수있는 대답이 아닙니다. – ldavid
기차/테스트의 경우에는 분할하기 전에 적용 할 수 있지만 물론 예측할 새 데이터 세트에서 동일한 문제가 발생할 수 있습니다. 이 경우 하나의 솔루션은 pandas 범주 데이터를 사용하여 범주를 지정한 다음 동일한 데이터 집합에 동일한 사양을 적용하는 것입니다. 이런 식으로 get_dummies는 매번 동일한 인코딩을 사용합니다. – simon