■ One-hot encoding (원-핫 인코딩)
- 머신러닝에서 분류 모델을 다루거나, 데이터 분석에서 범주형 데이터 혹은 카테고리컬한 문제를 만난다면, 우리는 데이터를 컴퓨터가 인식할 수 있도록 변형해줘야 한다.
- 유니크값이 많지 않은 경우 원-핫 인코딩을 사용한다.
- One-hot encoding이란 단 하나의 값만 True이고 나머지는 모두 False인 인코딩을 의미한다.
- 이 과정을 거치면 데이터 형태는 0.1로 이루어졌기 때문에 컴퓨터가 인식하고 학습하기에 용이하다. 즉, 범주형 변수를 이진 벡터로 표시한다.
- 모든 범주형 변수를 정수인 1과 0의 이진형 벡터로 표시하면서 범주형 변수를 열거하고, 해당하지 않는 모든 항목은 0으로, 해당하는 항목은 1로 표시한다.
▷ Pandas
pd.get_dummies(데이터프레임, columns=[컬럼명....])
▷ Scikit-Learn
from sklearn.preprocessing import OneHotEncoder
(0, 3) | 1.0 |
(1,1) | 1.0 |
(2, 0) | 1.0 |
(3,2) | 1.0 |
※ 원핫 인코딩의 결과는 희소행렬이기 때문에 메모리 공간을 절약하기 위해 1값의 위치만 표현한다.
- 절차상으로 봤을 때 판다스의 get_dummies를 이용하는 것이 유리하다.
■ Label encoding(라벨 인코딩)
- 머신러닝에서 분류 모델을 다루거나, 데이터 분석에서 범주형 데이터 혹은 카테고리컬한 문제를 만난다면, 우리는 데이터를 컴퓨터가 인식할 수 있도록 변형해줘야 한다.
- 라벨 인코딩은 명목형 변수의 값을 알파벳 정렬 순서로 숫자를 할당해 주는 것을 의미한다.
- 단, 라벨 인코딩을 수행하면 그 결과가 알파벳 순으로 라벨링 되는 것이고, 그로 인해서 랭크 된 숫자 정보가 모델에 잘못된 정보를 반영할 수 있다.
- 따라서, 명목형 변수는 가급적 원-핫 인코딩으로 처리해주지만 명목형 변수의 범주가 너무 많아 데이터의 컬럼들이 너무 많아진다면 라벨 인코딩을 해준다.
▷ Pandas
df.컬러명.map(딕셔너리 객체)
▷ Scikit-Learn
from sklearn.preprocessing import LabelEncoder
■ 데이터 스케일링(Data Scaling)
- 데이터의 분포가 달라 학습이 원활하게 안될 경우 지정한 값의 범위로 변경하여 전반적인 데이터의 분포를 맞춰주는 전처리 기법
- 특히, 거리를 기반으로 하는 머신러닝 모델(KNN, SVM등)의 경우 학습에 사용된 속성들 중 오차가 큰 특성에 맞춰서 가중치를 최적화하게 되기 때문에 원활하게 학습이 이뤄지지 않는 경우가 많다.
▶ 정규화(Normalization)
- 속성 값의 범위를 0~1 사이의 값으로 맞추는 작업을 의미한다.
- 데이터의 측정 단위가 달라서 데이터의 분포가 다를 경우 일반적으로 정규화를 해주는 것이 바람직하다.
▶ 표준화(Standardization)
- 속성 값의 범위를 평균은 0에, 표준편차는 1에 가깝게 만든다.
- 이상치 정보가 표준화 적용 전후와 비교했을 때 그대로 유지되기 때문에 정규화 스케일 변환보다 이상치에 덜 민감하다.
※ 이상치가 많은 경우에는 이상치 제거를 위해 표준화를 하는 것이 유리하고, 데이터의 상대적 크기에 대한 영향을 줄이기 위해서는 정규화를 하는 것이 유리하다.
▷ sklearn.preprocessing 모듈의 StandardScaler(표준화)와 MinMaxScaler(정규화) 클레스를 이용하여 스케일링 처리를 할 수 있다.
- fit() : 데이터 스케일링을 처리한다. 즉, 정규화에서는 입력 데이터의 최소, 최대값을 인지하고, 표준화에서는 평균과 표준편차를 계산한다.
- transform() : 실제 변환 작업을 수행한다.
- fit_transform() : fit()과 transform()을 동시에 처리한다. (학습 데이터에 한해 사용 : 평가 데이터에 사용할 경우 기준이 달라짐)
- 테스트 데이터에서는 새로 fit을 사용하지 않고 transform만 사용한다.
- 테스트 데이터에 적용할 경우 scaler 객체가 기존에 학습 데이터를 기반으로 fit 했던 기준(최소, 최대, 평균, 표준편차)을 무시하고 테스트 데이터 기반으로 새로운 기준을 적용하게 된다. 즉, 학습 데이터에 적용한 기준과 테스트 데이터에 적용한 기준이 달라진다.
■ 불균형 데이터 처리 (분류분석에 해당)
- 머신러닝에서 분류 문제를 다룰 때 데이터의 분포가 각 범주별로 골고루 분포되어 있는 것이 아니라 어느 한쪽으로 심하게 치우쳐 있는 데이터를 불균형 데이터라고 한다. 즉, 정상 범주의 관측치 수와 이상 범주의 관측치 수의 차이가 크게 나타나는 경우이다.
- 불균형 데이터는 높은 예측 정확도를 보일 수는 있어도 정밀도와 재현율이 낮아질 수 있어 분류 모형의 성능이 저하되는 문제가 발생한다.
- 분류 불균형 문제를 해결하기 위한 방법
① 샘플링 기법 (데이터 수를 변환)
- 언더 샘플링(Under Sampling) : 다수의 데이터를 줄이는 방법 (소수 클래스의 데이터가 어느정도 확보가 된 경우)
- 오버 샘플링(Over Sampling) : 소수의 데이터를 부풀리는 방법 (소수 클래스의 데이터가 현저히 적은 경우)
② 모델 조정 기법
- Cost sensitive learning(비용 민감 학습) : 클래스의 오분류에 대한 cost의 가중치를 조정하여 학습하는 방법
▶ 언더 샘플링
① Random Undersampling
- 다수 범주의 샘플들을 무작위로 선택
- 무작위 선택으로 인해 샘플링 결과에 따라 분류 경계면의 변동이 심하다.
② Tomek Link
- 다수 범주랑 소수 범주 데이터를 연결했을 때 중간의 어떠한 점이 없는 연결을 만들어 Tomek link를 형성한 후 다수 범주에 속한 관측치를 제거한다.
▶ 오버 샘플링
① Random Oversampling
- 소수 범주의 데이터를 무작위로 단순히 복제하여 데이터의 수를 늘린다.
- 동일한 데이터가 반복적으로 학습에 포함되면서 학습 정확도는 높지만 검증 정확도는 낮은 과적합이 발생할 수 있다.
② SMOTE(Synthetic Minority Over-sampling Technique)
- 소수 범주의 데이터를 활용하여 가상의 데이터를 생성한다.
- 소수 범주에서 각각의 샘플들의 K-NN(K-nearest neighbours)을 찾는다. 그리고 그 이웃들 사이에 선을 그어 무작위 점을 생성한다.
③ ADASYN(Adaptive Synthetic Sampling Approach)
- SMOTE의 개선된 버전으로 동일한 프로세스를 진행한 후 점들에 임의의 작은 값을 더해줌으로써 분산이 보다 큰 조금 더 사실적인 데이터를 생성한다.
▶ Cost-sensitive learning
- 데이터 자체를 생성하지는 않는다.
- 비용 민감 학습은 모델의 정확도를 최적화하는 대신 전체 오분류 비용을 최소화하는 것을 목적으로 한다.
- 실제 세계의 불균형 분류 문제는 일반적으로 발생할 수 있는 각 분류 오류에 대해 발생되는 비용이 다르다.
- 가령, 음성을 양성으로 분류하는 것이 양성을 음성으로 분류하는 것보다 비용이 적게 든다.
● 은행 대출 문제 : 신용이 나쁜 고객(소수, 양성)에게 대출을 해주는 것이 신용이 좋은 고객(다수, 음성)에게 대출을 거부하는 것보다 더 많은 오분류 비용이 발생한다.
● 암 진단 문제 : 암 환자(소수, 양성)를 퇴원시키는 것 보다 건강한 환자(다수, 음성)를 암으로 진단하고 더 많은 의학적 검사를 받게 하는 것이 더 적은 오분류 비용을 발생시킨다.
'데이터 분석 > 머신러닝' 카테고리의 다른 글
[ML] 다중공선성과 변수 선택 (1) | 2023.11.20 |
---|---|
[ML] 2. 데이터 전처리 (0) | 2023.11.17 |
[ML] 1. ML Basic (0) | 2023.11.16 |
[ML] 지도학습 알고리즘 - 회귀분석 (0) | 2023.11.15 |
[ML] 방법론 (0) | 2023.11.15 |