인프런 커뮤니티 질문&답변

SeungHoon Paik님의 프로필 이미지
SeungHoon Paik

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

레이블 인코딩/ 원핫인코딩

작성

·

503

0

타이타닉 데이터에서 sex, embark와 같은 categorical feature을 원핫인코딩까지 하지않고 레이블인코딩까지만 하신 이유가 tree기반 모델에서는 숫자의 특성을 반영하지 않기때문인가요??? 

그렇다면 tree기반 모델에서는 항상 categorical feature을 레이블인코딩까지만 해도 상관없는건가요??? 

그리고 분류에서는 모든 연속형데이터는 항상  일정 범위로 나누어 categorical 데이터로 바꿔줘야 하는것인지 궁금합니다. 

(만약 맞다면 회귀에서는 연속형데이터를 그대로 집어넣는것인지도 알고싶습니다.)

답변 5

0

권 철민님의 프로필 이미지
권 철민
지식공유자

Int 형이어야 합니다

0

그렇다면 최종적으로 모델링할때 categorical feature 데이터(x feature)는 (남자는0, 여자는1)

int형이여야하나요 object형이여야 하나요????

0

권 철민님의 프로필 이미지
권 철민
지식공유자

categorical 데이터는 category형으로 분류될 수 있는 데이터 입니다.

일반적으로 category를 code성으로 분류해도 됩니다.

가령 성별 feature가 있다면 남성/여성 값이 있을 수 있습니다.  등급 feature가 있다면, 특급, 비즈니스급, 일반 등으로 나눌수 있습니다. 국가 feature가 있다면, 대한민국, 미국, 영국,,, 등이 있을 수 있습니다. 이처럼 category 또는 code성으로 만들어 질수 있는 데이터가 category 데이터 입니다.

그런데 사이킷런은 문자열 값을 입력 받을 수 없습니다.  이러한 categorical 데이터는 일반적으로 문자열 데이터가 대부분입니다. 때문에 이런 categorical 데이터를 숫자형 값으로 변환 시킵니다. 이렇게 categorical 데이터를 숫자형 값으로 변환하는 기법으로는 레이블 인코딩, 원핫 인코딩등이 있습니다.

등급 feature가 특급, 비즈니스급, 일반으로 세가지 유형으로 있다면 이것을 0, 1, 2 숫자값으로 변경하는 것이 레이블 인코딩입니다.

감사합니다.

0

파이썬에서  categorical 데이터라는게 무슨의미인가요?

kaggle예제같은걸 찾아보면 타이타닉문제에서 

성별=['male',female'] 을 [0,1] 로 변환시켜주는데 이때 0,1 은 int형 데이터 아닌가요?

트리기반모델에서는 이를 자동으로 category 데이터로 인식하는 것인지

또한 0,1 이진분류 뿐만아니라 0,1,2,3,4,5와 같은 다중분류에서도 마찬가지인가요?

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

1. 원-핫 인코딩이 좋은지, 레이블 인코딩이 더 좋은지에 대해서는 아직까지도 설왕설래가 많습니다.

일반적으로 선형 기반(선형 회귀, 로지스틱 회귀)나 서포트 벡터 머신 기반에서는 레이블 인코딩 보다는 원-핫 인코딩이 더 좋은 걸로 알려져 있습니다. 개인적으로는 이게 테스트 할때마다 조금씩 다른것 같으며, 큰 차이가 아닐 수 있다고 생각합니다만,  어쩠든 원-핫 인코딩 자체가 인코딩 결과 값에 영향을 받지 않도록 만들어졌기 때문에 원-핫 인코딩을 보통은 이들 모델에 적용합니다.

트리 기반의 경우는 원-핫 인코딩/레이블 인코딩 둘다 크게 상관은 없습니다. 다만 경험상 원-핫 인코딩 또는 레이블 인코딩이 서로 약간씩 성능 차이가 있을 수는 있습니다. 이게 뭐가 좋다기 보다는 모델과 데이터의 조합에 따라서 차이가 있는 것으로 보입니다. 어떤 블로그에는 트리 구조상 원-핫 보다는 레이블이 낫다고 하지만, 경험상 케이스 바이 케이스로 조금씩 다를 수 있다고 생각합니다.

요약 드리면 선형, 서포트 벡터 머신 기반에서는 원핫을, 트리 기반에서는 둘중 하나를 적용하셔도 무방합니다. 다만 이 기준을 일반적인 것이지, 반드시 이 기준을 적용해야 성능이 향상되는 것이 아님을 강조 드립니다.

2. 그리고 분류에서는 모든 연속형데이터는 항상  일정 범위로 나누어 categorical 데이터로 바꿔줘야 하는것인지 궁금합니다.

=> 아닙니다. 연속형 테이터는 categorical로 바꾸실 필요가 없습니다. 문자형 데이터의 경우에 숫자형 categorical로 바꿔주시면 됩니다.

감사합니다.

SeungHoon Paik님의 프로필 이미지
SeungHoon Paik

작성한 질문수

질문하기