변수가 문자열로 나타날 때뿐만 아니라, 데이터상으로는 수치라 하더라도 값의 크기나 순서에 의미가 없을 때는 범주형 변수로 취급
범주형 변수를 변화 하기 전에 테스트 데이터에만 존재하는 범주가 있는지부터 확인하고,
만일 있다면 다음 방법 중 하나를 선택
범주형 변수의 가장 대표적이고 전통적인 처리 방법
범주형 변수의 각 레벨에 대해 해당 레벨인지 여부를 나타내는 0과 1 두 값을 갖는 변수를 각각 생성
→ n개의 레벨을 갖는 범주형 변수에 원-핫 인코딩을 적용하면 두 값 (0,1)을 갖는 변수의 특징이 n개 만들어짐 (이들 두 값의 변수 :가변수)
pandas 모듈의 get_dummies 함수
사이킷런 preprocessing 모듈의 OneHotEncoder 클래스
결점 :특징의 개수가 범주형 변수의 레벨 개수에 따라 증가
→ 범주형 변수의 레벨이 너무 많을 땐?
다중공선성 문제
→ 가변수 n-1개 만듦
(다중공선성이란?
: 통계학의 회귀 분석에서(예측하려는 대상인 목적변수를 제외한) 설명변수 간에 강한 상관관계가 나타나는 문제. 해결 방법으로는 상관관계가 높은 하나 또는 일부의 변수를 제거하거나 PCA(주성분분석) 이용)
(= 순서형 인코딩)
레벨을 정수로 변환
수치는 대부분 본질적인 의미가 없음
→ 결정트리모델에 기반을 둔 방법이 아닐 경우 레이블 인코딩으로 변화한 특징을 학습에 직접 이용하는 건 그다지 적절하지 않음
사이킷런의 LabelEncoder 클래스
원-핫 인코딩으로 변환 뒤 범주의 레벨 수와 같아지는 특징의 수를 줄이는 변환
변환 후의 특징 수를 먼저 정해두고, 해시함수를 이용하여 레벨 별로 플래그를 표시할 위치를 결정
경진 대회에서는 레벨의 수가 많아도 레이블 인코딩으로 변환한 뒤 GBDT로 학습함으로써 어느 정도 대응할 수 있으므로 이 방법은 그다지 널리 쓰이지는 않음
sckit-learn.feature_extraction 모듈의 FeatureHasher
출현 횟수 혹은 출현 빈도로 범주형 변수를 대체하는 방법
각 레벨의 출현 빈도와 목적변수 간에 관련성이 있을 때 유효
동률의 값이 발생할 때도 있으니 주의
수치형 변수 스케일링과 마찬가지로, 학습 데이터와 테스트 데이터를 따로따로 정의하여 변환해버리면 다른 의미의 변수가 되므로 주의
목적변수를 이용하여 범주형 변수를 수치형 변수로 변환하는 방법
→ 목적변수의 데이터 정보 누출 우려
타깃 인코딩의 기법과 구현 (1)
학습 데이터를 “타깃 인코딩용 폴드”로 분할하고,
각 폴드마다 자신의 폴드 이외의 데이터로 계산하는 “아웃 오브 폴드” 방법으로
목적변수의 평균값 계산
(타깃 인코딩용 폴드 수는 4개에서 10개 정도가 좋음)
타깃 인코딩의 기법과 구현 (2)
교차 검증을 실시할 경우,
검증 데이터의 목적변수가 변수에 포함되지 않도록 하기 위해
각 폴드에서는 검증 데이터를 제외한 학습 데이터를 타깃 인코딩용 폴드로 분할
이 작업을 교차 검증의 폴드 수만큼 반복
목적변수의 평균 구하기
(중앙값 취할 때도, 평가지표가 로그 변환으로 평가될 때는 로그 취하고 평균 계산)
타깃 인코딩과 데이터 정보 누출(1)
학습 데이터 전체에서 단순 타깃 인코딩을 할 경우,
→ 특정 레벨에 속하는 행 데이터가 1개뿐일 때, 해당 레벨의 타깃 인코딩 결과는 목적변수의 값 자체가 되어버림 →과적합
타깃 인코딩과 데이터 정보 누출(2)
리브-원-아웃(leave-one-out) 문제 (=폴드 수가 지나치게 늘어나도 문제)
→ 폴드 수는 적당한게 좋음 (4~10)
그 밖이 타깃 인코딩
데이터 정보 누출 방지 위해 변환된 값에 노이즈를 더하는 방법
데이터 수가 적은 레벨이 극단적인 값을 취하지 않도록 데이터 전체의 평균값과 가중치를 부여
등등
(=분산 표현)
자연어 처리에서 단어나 범주형 변수와 같은 이산적인 표현을 실수 벡터로 변환하는 방법
레벨의 수가 많아 (원-핫 인코딩 등의 방법으로) 해당 변수가 지닌 정보를 모델에 충분히 학습시키기 어려울 땐?
→ 단어나 범주형 변수를 의미와 성질이 표현된 실수 벡터로 변환하면 편리함
자연어 처리에서 단어에 대한 학습이 이미 끝난 단어 임베딩 종류
word2Vec
GloVe
fastText
(각각 어떤 모델로 단어를 표현하는 벡터를 학습했는지가 다름)
임베딩을 이용한 학습
임베딩 계층의 가중치(각 단어나 범주형 변수를 어떤 실수 벡터로 변환할지)를
측정 대상에 서열(순서)를 부여하는 변수
값의 간격은 무의미
결정 트리 기반 모델에서는,
본래 변수의 순서에만 의존하므로 서열을 그대로 정수로 치환해 수치형 변수로 다루면 됨
그 밖의 모델에서는,
수치형 변수라 볼 수도 있고, 순서 정보를 무시하고 범주형 변수로 도 볼 수 있음 →둘 다 사용
레벨이 의미를 지닐 때,
| AWS (0) | 2024.07.17 |
|---|---|
| [데이터가 뛰어노는 AI 놀이터, 캐글] ch.6 모델 튜닝-6.3 편중된 클래스 분포의 대응 (1) | 2024.04.15 |
| [데이터가 뛰어노는 AI 놀이터, 캐글] ch.5 모델 평가-5.3 시계열 데이터의 검증 방법 (1) | 2024.04.15 |
| [데이터가 뛰어노는 AI 놀이터, 캐글] ch.4 모델 구축-4.1 모델의 기본 이해 (1) | 2024.04.15 |