| 문자열로 된 범주형 변수를 모델이 인식하지 못하므로 수치형 변수로 변환하는 기법
• 순서가 없는 범주형 변수(명목형 변수)에 사용
• n개의 범주를 가진 범주형 특성을 개의 이진 특성 (0 또는 1)으로 변환
• n개의 새로운 특성이 생성되므로 범주가 너무 많은 경우(high cardinality)에는 적절하지 않다.
원-핫 인코딩을 두 가지 과정
## get_dummies 를 사용한 원핫인코딩
df_oh = pd.get_dummies(df, prefix=['City'])
# !pip install category_encoders
from category_encoders import OneHotEncoder # 범주형 변수를 가진 특성만 원인코딩 수행
encoder = OneHotEncoder(use_cat_names = True) # 객체 생성
X_train = encoder.fit_transform(X_train) # 훈련셋 -> .fit_transform
X_test = encoder.transform(X_test) # 테스트셋 -> .transform
## f_regresison, SelectKBest
from sklearn.feature_selection import f_regression, SelectKBest
## target과 상관관계가 높은 상위10개 특성 선택
selector = SelectKBest(score_func=f_regression, k=10)
## 학습데이터에 fit_transform
X_train_selected = selector.fit_transform(X_train, y_train)
## 테스트 데이터는 transform
X_test_selected = selector.transform(X_test)
n: 샘플수, p: 특성수, : 튜닝 파라미터(패널티)
참고: alpha, lambda, regularization parameter, penalty term 모두 같은 뜻 입니다.
- 기존 비용함수 SSE에 회귀계수 제곱합 * lambda
• Ridge
• RidgeCV
from sklearn.linear_model import RidgeCV
# RidgeCV를 통한 최적 패널티(alpha, lambda) 검증
alphas = [0, 0.001, 0.01, 0.1, 1]
ridge = RidgeCV(alphas=alphas, normalize=True, cv=5) # cv(교착검증),normalize=True : 표준화
ridge.fit(X_train_selected, y_train)
print("alpha: ", ridge.alpha_) # 최적 패널티 반환
print("best score: ", ridge.best_score_) # 가장 성능이 좋은 score 반환