범주형 자료(Categorical variable)를 다루기 위한 기법
순서가 없는 명목형(nominal) / 순서가 있는 순서형(ordinal)
※ Cardinality(집합의 크기)
A = {1, 2, 5} → cardinality of 3
카테고리가 너무 많은 경우(high cardinality)는 one-hot encoding 사용하기 적합하지 않다
from category_encoders import OneHotEncoder
encoder = OneHotEncoder(use_cat_names = True)
X_train = encoder.fit_transform(X_train)
X_test = encoder.transform(X_test)
# 범주형변수인 특성들만 알아서 one-hot encoding을 수행
과제에 적합한 특성을 만들어 내는 과정
# target과 가장 연관된 features를 K개 선택
from sklearn.feature_selection import f_regression, SelectKBest
selector = SelectKBest(score_func=f_regression, k=10) # 특성 10개
# 학습데이터에 fit_transform
X_train_selected = selector.fit_transform(X_train, y_train)
# 테스트 데이터에 transform
X_test_selected = selector.transform(X_test)
all_features = X_train.columns
selected_mask = selector.get_support()
# 선택된 특성들
selected_names = all_features[selected_mask]
# 선택되지 않은 특성들
unselected_names = all_features[~selected_mask]
※ 특성수를 1부터 늘리면서 MAE와 R2값을 측정하여 적절한 K값을 찾는다
Ridge 회귀는 기존 다중회귀선을 훈련데이터에 덜 적합이 되도록 만들어서 그 결과로 더 좋은 모델이 만들어 진다
- Ridge회귀를 사용하는 이유? – 과적합을 줄이기 위해서 사용한다 과적합을 줄이는 가장 간단한 방법 중 하나가 모델의 복잡도를 줄이는 방법이다. 특성의 개수를 줄이거나 모델을 단순한 모양으로 적합하는 것이다
- Ridge 회귀는 편향을 조금 더하고 / 분산을 줄이는 방법으로 정규화를 수행한다
람다는 정규화의 강도를 조절하는 패널티값이다
:
n : 샘플수, p : 특성수, : 튜닝 파라미터(패널티)
argmin(f(x)) : f(x)가 가장 작아지게하는 x값
※ alpha, lambda, regularization parameter, penalty term 모두 같은 뜻
→ 0, →
→ ∞, → 0
# sklearn 0.23 버전 이상 필요
from sklearn.linear_model import RidgeCV
alphas = [0, 0.001, 0.01, 0.1, 1] # 알파(람다)값들
ridge = RidgeCV(alphas=alphas, normalize=True, cv=5) # ridgeCV 모델
ridge.fit(X_train, y_train) # 모델 훈련
ridge.alpha_ # 가장 좋은 점수가 나온 알파값
ridge.best_score_ # 점수