[CodesSates] AI 부트캠프

Ridge Regression

웅탈 2021. 4. 8. 00:42

Ridge Regression

 

Pandas-Profiling

 

- 데이터 타입, 결측값, 중복 등 다양한 정보 확인 가능 매우 유용

 

- df.profile_report()

wikidocs.net/47193

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

 

 

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 쉬운풀이

brunch.co.kr/@itschloe1/11

 

Ridge와 Lasso Regression의 쉬운 풀이

왜 linear regression 대신 Ridge,Lasso를 선택할까 | 오늘은 이전 글의 목차에서 다루지 못한 나머지 주제들을 다뤄보려 합니다. *이전 글 https://brunch.co.kr/@itschloe1/9 [목차] 1. Simple models for Prediction 2. Linear

brunch.co.kr

 

- Ridge regression 간단한 설명과 장점

modern-manual.tistory.com/21

 

Ridge regression(능형 회귀) 간단한 설명과 장점

 선형 모델(Linear model)의 예측력(accuracy) 혹은 설명력(interpretability)을 높이기 위해 여러 정규화(regularization) 방법들을 사용한다. 대표적인 shrinkage 방법에는 ridge regression과 lasso가 있으며..

modern-manual.tistory.com

 

'[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