본문 바로가기

Machine Learning/전처리(Preprocessing)

Machine Learning - One-Hot Encoding (원핫 인코딩)

반응형

https://steadiness-193.tistory.com/70

 

판다스 - 원핫인코딩 (One-Hot Encoding)

https://steadiness-193.tistory.com/19 판다스 - 구간 분할(pd.cut) 데이터 불러오기 horsepower를 3구간으로 저출력 / 보통출력 / 고출력 나누고자 한다. 이때 pd.cut을 이용하는데 (데이터배열, 구간, 레이블이..

steadiness-193.tistory.com

 

https://steadiness-193.tistory.com/99

 

판다스 - 원핫인코딩 : get_dummies

범주형 데이터는 연산이 어렵기 때문에 숫자형으로 처리 가능하게 바꿔주는 것 범주형 데이터의 각 범주(category)를 컬럼 레벨로 변경 해당 범주에 해당하면 1로, 아니면 0으로 채우는 인코딩 기��

steadiness-193.tistory.com

 

위 포스팅들에서 해보았으나

 

이번엔 sklearn.preprocessing 패키지의 OneHotEncoder을 이용해보자.

 

 

[One-Hot Encoding]

n개의 범주형 데이터를 n개의 비트(0, 1) 벡터로 표현

서로 다른 범주 데이터는 독립적인 관계라는 것을 나타낼 수 있음



[sklearn의 OneHotEncoder 주의할 점]

1. 판다스의 시리즈가 아닌 numpy 행렬을 입력해야함 → values 이용

2. 벡터 입력을 허용하지 않음 → reshape을 이용해 Matrix로 변환 필요

 

 

 

데이터 불러오기

 

 

open과 close를 원핫인코딩 해본다.

 

 

 

 

 

 

 

(1) OneHotEncoder 불러온 뒤 정의

 

 

sparse=True가 디폴트이며 이는 Matrix를 반환한다.

 

원핫인코딩에서 필요한 것은 array이므로 sparse 옵션에 False를 넣어준다.

 

 

sklearn.preprocessing 패키지의 OneHotEncoder를 불러왔다.

 

이를 ohe로 정의한다.

 

 

 

 

 

label의 shape 확인 및 reshape

 

 

위 주의할 점에 언급했듯이 벡터를 입력하면 안되므로

 

reshape을 이용해 (301, 1) 형태로 바꿔준다.

 

 

 

 

 

 

 

(2) 범주 찾기

 

 

fit으로 범주를 찾아낸다.

 

 

 

 

 

(3) 원핫인코딩 배열 리턴

 

transform을 이용하면 원핫인코딩이 된 배열을 반환받을 수 있다.

 

 

 

 

 

 

 

(4) categories_ 이용

 

 

위 transform의 결과만 보면 어떤 것이 0이고 1인지 알기 어렵다.

 

 

이때 쓰는 것이 categories_이다.

 

 

 

원핫인코딩된 배열의 순서는 close와 open이다.

 

 

 

categories_의 결과는 리스트로 한번 감싸져 있으므로

 

 

인덱싱으로 풀어낸 뒤

 

 

 

 

 

컬럼으로 이용해

 

데이터프레임으로 만들어 낼 수 있다.

 

 

 

 

 

 

 

 

(5) 결과 확인

 

 

이상없이 원본 데이터에 맞춰 원핫인코딩이 잘 된 것을 확인할 수 있다.

 

 

반응형