티스토리 뷰

범주형전처리개짜증나

이번 포스팅의 주제는 범주형 변수 인코딩하기 + 훈련 후 예측 시 새로운 데이터가 들어왔을 때 어떻게 되는가

img

 

 

 

OneHotEncoder

간단한 데이터를 만들어서 살펴보자.

컬럼0은 명목형이고 컬럼1은 순위형이다. 원핫인코더의 좋은 점은 Ordinal 변수도 모두 범주형으로 인식하여 처리한다는 점이다.

컬럼0이 a,b,c 3값이 때문에 [1,0,0] [0,1,0] [0,0,1]로 잘 구분했고 컬럼1 역시 [0,1] [1,0] 으로 잘 구분했다. 그러나 원핫인코더의 단점은 테스트셋에 새로운 데이터가 들어왔을 때 에러를 낸다는 점이다. 테스트셋의 컬럼0에 훈련하지 않은 값 d를 넣게되면 아래와 같은 에러를 볼 수 있다.

ValueError: Found unknown categories ['d'] in column 0 during transform

 

 

 

get_dummies

그럼 이번엔 판다스의 get_dummies를 이용해보자.

비슷하지만 조금 다른 결과가 나온다. 가장 큰 차이는 Ordinal 변수는 숫자로 인식해서 범주형 처리를 하지 않은 점이다. 명목형인 컬럼0 뒤에 prefix를 붙이고 값을 구분했다. 굳이 하나 더 하자면 float이 아니라 int로 된 점 정도.

그러나 get_dummies 역시 test에 새로운 값이 들어왔을 때는 다른 컬럼을 생성하게 되므로 역시 d 값을 걸러내지 못한다.

 

 

 

 

결론 > test 값에 새로운 값이 들어올 때도 잘 분류하고싶다면 본인이 직접 소스코드 변경해야한다. ㅎㅎ. 이거 진짜 짜증나서 만들어야겠다 ㅎㅎㅎㅎ

'데이터 분석 > ML' 카테고리의 다른 글

SVM 기초 빠르게 훑어보기  (0) 2019.06.19
문자열 텍스트 프레임 분류하기  (0) 2019.05.07
정규식  (0) 2018.11.09
알고리즘 체인과 파이프라인  (0) 2018.11.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함