: feature의 범위를 조정해서 정규화
💡 목표: feature의 분산과 표준편차를 조정해서 정규분포 형채를 띄게 하는 것
🤔 스케일링은 왜 하는걸까?
1) 서로 다른 변수끼리 비교하는 것이 편리
2) feature scaling 없이 작동하는 알고리즘에서 더 빨리 작동
3) 머신러닝 성능이 상승
4) 이상치에 대한 강점이 있음.
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import RobustScaler
1) StandardScaler (Z-score scaling)
from sklearn.preprocessing import StandardScaler
# Standardization 평균 0 / 분산 1
ss = StandardScaler()
ss = scaler.fit_transform(DataFrame)
# 교차검증시
ss.fit(X_train)
X_train = ss.transform(X_train)
X_test = ss.transform(X_test)
2) MinMaxScaler
from sklearn.preprocessing import MinMaxScaler
# Normalization 최소값 0 / 최대값 1
mms = MinMaxScaler()
mms = scaler.fit_transform(DataFrame)
# 교차검증시
mms.fit(X_train)
X_train = mms.transform(X_train)
X_test = mms.transform(X_test)
3) RobustScaler
from sklearn.preprocessing import RobusterScaler
# 중앙값 0 / IQR 1
rs = RobusterScaler()
rs = rs.fit_transform(DataFrame)
# 교차검증시
rs.fit(X_train)
X_train = rs.transform(X_train)
X_test = rs.transform(X_test)
: Categorical Feature를 다른 bool변수로 대체하여 특정 레이블이 참인지 여부를 나타냄.
분류: n개 모두 인코딩
회귀: n-1개 인코딩
: 범주형 변수값을 이진법으로 변환
장점: feature 개수 만큼 추가적인 변수 생성한다는 부분에서 One-Hot-Encoding 과 비슷하다고 생각할 수 있지만 One-Hot-Encoding 에 비해 훨씬 더 적은 개수의 추가 변수가 생성된다.
e.g. 100개의 범주로 One Hot Encoding을 할 경우 100개의 변수가 추가로 생기지만, Binary Encoding으로는 7개의 변수가 생긴다.
단점: 인코딩한 변수만 봤을때에는 이 데이터가 무엇을 의미하는지를 잘 알지 못한다.
사이킷런을 이용해 인코딩을 진행하면 알파벳 순서대로 인코딩이 진행된다.
Pandas의 factorize를 이용하면 데이터 순서대로 인코딩이 진행된다.
: Categorical Feature를 Numerical Feature 중 Ordinal Feature로 변환
💡 범주가 너무 많을 때 one-hot-encoding을 사용하면 중요하지 않은 특성이 많아지기 때문에 성능이 저하될 수 있다. 그럴 경우앤 ordinal encoding을 이용하는 것이 좋다.
Ordinal Encoding과 Label Encoding은 범주형 자료를 숫자형 자료로 바꿔주기에 결과적으로 큰 차이가 존재하지 않는다.