Ridge Regression
Pandas-Profiling
- 데이터 타입, 결측값, 중복 등 다양한 정보 확인 가능 매우 유용
- df.profile_report()
One Hot Encoding
- 범주형 변수(Categorical)는 순서가 없는 명목형(nominal)과 순서가 있는 순서형(ordinal)로 나뉨.
- pd.get_dummies 활용
# prefix 컬럼에 지정한 글자로 시작하도록
# drop_first 불필요한 요소 제거
pd.get_dummies(df, prefix ['text'], drop_first=True)
- category_encoders 활용
## import OneHotEncoder
from category_encoders import OneHotEncoder
## 원핫 인코딩
encoder = OneHotEncoder(use_cat_names = True)
X_train = encoder.fit_transform(X_train)
X_test = encoder.transform(X_test)
# category_encoders를 사용하면 범주형변수를 가진 특성만 원핫인코딩을 수행함.
- np.percentile 사용해 이상치 제거
df = df[(df['price'] >= np.percentile(df['price'], 0.05)) &
(df['price'] <= np.percentile(df['price'], 99.5))]
- train / test 나누기
# train_test_split 메소드 사용
## Dataset을 나눌 때 test_size 옵션으로 Train, Test의 비율을 설정할 수 있고
## random_state로 seed 값을 지정할 수 있다.
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.3, random_state=777)
# sample 메소드를 사용
train = df.sample(frac=0.75,random_state=1)
test = df.drop(train.index)
# 타겟 설정 참고
target = df['price']
feature = df.loc[:, df.columns != 'Price']
Feature selection
- SelectKBest : target과 가장 correlated 된 features 를 k개 고르는 것
from sklearn.feature_selection import f_regression, SelectKBest
## selctor 정의합니다.
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)
# 선택된 특성 확인
all_names = X_train.columns
## selector.get_support()
selected_mask = selector.get_support()
## 선택된 특성들
selected_names = all_names[selected_mask]
## 선택되지 않은 특성들
unselected_names = all_names[~selected_mask]
print('Selected names: ', selected_names)
print('Unselected names: ', unselected_names)
- 가장 큰 수의 인덱스 번호 추출
# np.argmax()
a = np.argmax(df)
df[a]
# 이렇게 하면 가장 큰 수의 컬럼 이름 확인 가능
Ridge regression
- Ridge 회귀는 기존 다중회귀선을 훈련데이터에 덜 적합이 되도록 만든다(과적합을 줄이기 위해)
- Ridge 회귀는 이 편향을 조금 더하고, 분산을 줄이는 방법으로 정규화(Regularization)를 수행, 여기서 말하는 정규화는 모델을 변형하여 과적합을 완화해 일반화 성능을 높여주기 위한 기법
- alpha(패널티) 값이 높아질수록 기울기가 0에 가까워지며 평균 기준모델(baseline)과 비슷해짐, 최적의 alpha 값을 구하기 위해 교차검증(RidgeCV)
# Ridge Regression
from sklearn.linear_model import Ridge
ridge = Ridge(alpha=alpha, normalize=True)
ridge.fit()
# RidgeCV를 통한 최적 패널티(alpha, lambda) 검증
from sklearn.linear_model import RidgeCV
alphas = [0.01, 0.05, 0.1, 0.2, 1.0, 10.0, 100.0]
ridge = RidgeCV(alphas=alphas, normalize=True, cv=3)
ridge.fit(ans[['x']], ans['y'])
print("alpha: ", ridge.alpha_)
print("best score: ", ridge.best_score_)
# 이러한 Ridge 회귀 직선의 생김새는 OLS매우 비슷하지만 이상치(outlier) 영향을 덜 받는다
참고블로그
- Ridge와 Lasso 쉬운풀이
- Ridge regression 간단한 설명과 장점
'[CodesSates] AI 부트캠프' 카테고리의 다른 글
Decision Trees (0) | 2021.04.12 |
---|---|
Logistic Regression (0) | 2021.04.12 |
Multiple Regression (0) | 2021.04.06 |
Simple Regression (0) | 2021.04.05 |
Clustering (0) | 2021.03.24 |