페이지 불러오는 중
스케일링과 인코딩은 "데이터를 모델이 이해하는 형태로 바꾸는" 작업입니다. 어느 것도 모델과 독립적이지 않습니다. 트리 모델과 선형 모델은 필요로 하는 것이 정반대입니다.
sklearn.preprocessing의 StandardScaler·MinMaxScaler·RobustScaler·OneHotEncoder·OrdinalEncoder, pandas.get_dummiesfrom sklearn.preprocessing import StandardScaler
scaler = StandardScaler().fit(X_train) # μ, σ는 train에서만
X_train_s = scaler.transform(X_train)
X_test_s = scaler.transform(X_test) # 같은 μ, σ 적용전체 데이터로 fit하면 test의 평균·분산 정보가 train 전처리에 반영되어 성능이 낙관적으로 왜곡됩니다. 교차검증에서는 Pipeline으로 묶어 각 fold 안에서 scaler가 새로 fit되게 합니다(데이터 전처리 이론 06. 불균형·데이터 누수·재현성).
원-핫 인코딩은 k개 범주를 k개의 0/1 열로 펼칩니다. 절편이 있는 선형 모델에서는 k개 열이 완전한 선형 종속(합이 항상 1)을 이뤄 더미변수 함정(dummy variable trap), 즉 완전 다중공선성이 생깁니다. 이때 한 범주를 기준(reference)으로 빼서 k−1개만 씁니다(drop_first=True, drop="first").
pd.get_dummies(df["city"], prefix="city", drop_first=True)순서가 있는 범주(하<중<상)는 정수로 매핑해 순서를 보존합니다. 단, 정수 간격이 균등하다는 보장은 없으므로(사실), 선형 모델에서는 간격 가정을 신중히 다루고 필요 시 원-핫과 병행 실험합니다.
from sklearn.preprocessing import OrdinalEncoder
OrdinalEncoder(categories=[["low", "mid", "high"]]).fit_transform(df[["grade"]])주의: 명목형에 무심코 OrdinalEncoder나 LabelEncoder를 쓰면 존재하지 않는 대소 관계를 모델에 주입합니다. 선형·거리 기반 모델에서 특히 해롭습니다.
타깃(mean) 인코딩은 각 범주를 "그 범주에서의 타깃 평균"으로 치환합니다. 열이 하나로 유지되어 고카디널리티에 유리하지만, 타깃 누수 위험이 큽니다.
sklearn의 TargetEncoder는 내부 교차 적합으로 이를 완화합니다.
댓글
GitHub 계정으로 의견이나 질문을 남길 수 있습니다.