대부분 우리가 알고있는 데이터의 형태는 Label encoding이다. 예를 들어서, 나라이름과 같이 나라이름이 명시적으로 기록되어있는 경우가 Label encoding이다. 그러나 이는 분석 단계에서는 Label encoding은 String dtype으로 분석 단계에서 계산하기에는 어렵다. 계산가능한 타입으로 만들어야 분석에서 사용할 수 있기 때문이다.


결과변수가 array 형태를 원한다면 sklearn.preprocessing 을 이용한다.


카테고리의 개수만큼 만들지말고 ,N-1개 만큼 만드는것을 추천한다. 추후에 선형회귀 등을 돌릴 때 변수를 N개로 만들면, 

n개에 대한 식이 생겨서 다중공선성이 생깄다. 예를 들어 3변수를 만들면,  x1+x2+x3 = 1이라는 식이 있기에 공선성이 생길수밖에 없다.



Mapping


이 방식의 문제는 각 카테고리변수를 서열척도로 변경하여 각각 1,2,3,4에 매핑한다는 것이다. 그렇기에 1에 매핑된 범주형변수는 2에 매핑한 변수보다 1/2이 크기가 작다고 머신러닝이 계산할 수 있다. 그렇기에 원 -핫인코딩을 하는 것이 권장된다.

1
2
3
4
housing_cat = housing["ocean_proximity"]
housing_cat_encode, housing_categories = housing_cat.factorize()
housing_cat_encode # array([0, 0, 1, ..., 2, 0, 3])
housing_categories  # Index(['<1H OCEAN', 'NEAR OCEAN', 'INLAND', 'NEAR BAY', 'ISLAND'], dtype='object')
cs






Pandas 내부의 함수를 이용한 변환



컬럼수준에서 One-hot encoding을 원한다면, Pandas의 get_dummies 을 이용한다.


get_dummies(data)

data는 array, series, dataframe모두 가능하다.

return 값도 데이터 프레임의 형식을 갖는다.



Example)

1
2
3
4
5
6
7
8
# 성별(SEX)컬럼을 one hot encoding한다
one_hot = pd.get_dummies(df['sex'])
 
# 원래 있던 칼럼을 삭제한다.
df = df.drop('sex',axis = 1)
 
# 원래 잇던 테이블에 새로만든 one_hot 데이터프레임을 조인한다. (SQL 조인과 관계없이 순차적으로 column bind)하는 것
df = df.join(one_hot)

cs


여러개 컬럼을 동시에 one-hot encoding

1
2
3
4
onehot_df = pd.get_dummies(df, columns=['nation''genre','limited_age'], drop_first=True)
len(onehot_df.columns) # 컬럼의 개수가 늘어난 것을 알 수 있다.
 
 
cs


반응형

'Data science' 카테고리의 다른 글

Reshape and Pivot table  (0) 2019.03.08
SVM (Support Vector machine)  (0) 2019.02.23
Decision Tree (의사결정나무)  (2) 2019.02.15
Pandas Dataframe Manipulation  (0) 2019.02.14
kNN model (k-Nearest neighbor model)  (0) 2019.02.13

+ Recent posts