인코더(Encorder) - OneHotEncoder

OneHotEncoder

  • 사용하는 이유 : 일단 object type은 머신러닝 fit을 할 수 없고, 카테고리화를 하여 fitting을 정확하게 하기 위함이다.
  • 방법에는 OneHotEncoder, get_dummies 등이 있다.
1
OneHotEncoder().fit_transform(data3['column1','column2'])
1
2
3
4
5
6
7
8
9
10
11
OneHotEncoder : 범주형 변수 -> 이항 변수
ex) 성적 column에 ['a','b','c','d'] 이렇게 있다면
OneHotEncoder 적용시 아래와같이 변경할 수 있다.

0 1 2 3 4(colums)
---------
a 1 0 0 0 0
b 0 1 0 0 0
c 0 0 1 0 0
d 0 0 0 1 0
f 0 0 0 0 1
1
2
3
4
5
6
7
8
9
10
11
12
# 예를 들어 data3을 OneHotEncoder로 돌리게 되면,
# ex) 성별 : male(0), female(1)
# 연령대 : 20대(0), 30대(1), 40대(1)
# 성적 : a(0), b(1), c(2), d(3), f(4) =>
# 성별 데이터2, 연령대:3, 성적 :5

data3 = np.array([
[0, 0, 0],#남자, 20대, a(성적)
[0, 2, 4],#남자, 40대, f
[1, 1, 1],#여자, 30대, b
[1, 0, 3] #여자, 20대, c
])
1
2
3
4
5
6
7
OneHotEncoder().fit_transform(data3).toarray()
# 성별(1자리), 연령대(3), 성적(5)
col >[성별, 연 령 대 , 성 적 ~~~~~~~~]
array([[1., 0., 1., 0., 0., 1., 0., 0., 0.],
[1., 0., 0., 0., 1., 0., 0., 0., 1.],
[0., 1., 0., 1., 0., 0., 1., 0., 0.],
[0., 1., 1., 0., 0., 0., 0., 1., 0.]])
  • 인코딩된 값들을 확인하는 방법은 다음과 같습니다.
1
2
3
4
5
fitted_data3 = OneHotEncoder().fit(data3)
fitted_data3.n_features_in_
# 결과값은 "3"이 출력 (성별,연령대,성적)
fitted_data3.categories_
# 결과값은 [array([0, 1]), array([0, 1, 2]), array([0, 1, 3, 4])]
Author

InhwanCho

Posted on

2022-11-21

Updated on

2022-11-21

Licensed under

Comments