Ridge Regression


Linear Models


1. One-Hot Encoding ( 원핫인코딩 )

  • 명목형 : 순서, 높고낮음, 없는 데이터
  • 순서형 : 순서 정보가 있는 데이터

Q . 원핫인코딩이란?
A . 데이터를 수많은 0과 1의 값으로 데이터를 구별하는 인코딩이다.

  • 원핫인코딩을 수행하면 각 카테고리에 해당하는 변수들이 모두 차원에 더해지게 된다. 그러므로 카테고리가 너무 많은 경우( high cardinality )에는 사용하기 적합하지 않다.
  • Cardinality : 특정 데이터 집합의 유니크( Unique ) 한 값의 개수

  • pd.get_dummies(df, prefix=['Color'])

1.1 Category_encoders

  • category_encoders는 범주형 데이터에만 원핫인코딩을 수행할 수 있다.
# category_encoders 설치
!pip install 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)

2. Feature selection ( 특성 선택 )

  • Feature Engineering( 특성공학 ) : 과제에 적합한 특성을 만들어 내는 과정

  • 필요한 좋은 특성들만 뽑는 방법 : SelectKBest

# target(Price)와 가장 correlated 된 features 를 k개 고르는 것이 목표입니다.

## f_regresison, SelectKBest
from sklearn.feature_selection import f_regression, SelectKBest

## selctor 정의합니다.
selector = SelectKBest(score_func=f_regression, k=10) # k=10개의 특성 선택

## 학습데이터에 fit_transform 
X_train_selected = selector.fit_transform(X_train, y_train)

## 테스트 데이터는 transform
X_test_selected = selector.transform(X_test)

# shape 확인
X_train_selected.shape, X_test_selected.shape

3. Ridge Regression 모델 학습

Q . Ridge Regression이란?
A . Ridge 회귀는 기존 다중회귀선을 훈련데이터에 덜 적합이 되도록 만들어서 과적합을 줄이고, 그 결과로 더 좋은 모델이 만들어진다.

  • Ridge 회귀는 편향을 조금 더하고, 분산을 줄이는 방법으로 정규화를 수행한다.
  • Ridge 회귀는 과적합을 줄이기 위해서 사용한다.
    • 과적합을 줄이는 방법 중 하나로 모델의 복잡도를 줄인다.( 단순한 모델로 만든다. )
    • 과적합을 줄이는 다른 방법으로는 feature를 줄인다.
  • Ridge
ridge = Ridge(alpha=alpha, normalize=True)
ridge.fit(ans[['x']], ans['y'])

# 회귀계수와 intercept를 가져옵니다.
m = ridge.coef_[0].round(2)
b = ridge.intercept_.round(2)

ans['y_pred'] = ridge.predict(ans[['x']])
  • RidgeCV
from sklearn.linear_model import RidgeCV

# alpha : lambda, penalty term
alphas = [0.01, 0.05, 0.1, 0.2, 1.0, 10.0, 100.0]

ridge = RidgeCV(alphas=alphas, normalize=True, cv=3) #cross-validation
ridge.fit(ans[['x']], ans['y'])
print("alpha: ", ridge.alpha_)
print("best score: ", ridge.best_score_)

OLS vs Ridge
Ridge 회귀 직선의 생김새는 OLS매우 비슷하지만 이상치(outlier) 영향을 덜 받는다.

  • OLS : Ordinary Least Squares( 최소자승법 )는 잔차제곱합(RSS: Residual Sum of Squares)를 최소화하는 가중치 벡터를 구하는 방법이다.
  • OLS
ax = ans.plot.scatter('x', 'y')

# OLS 
ols = LinearRegression()
ols.fit(ans[['x']], ans['y'])

# 회귀계수와 intercept를 확인합니다.
m = ols.coef_[0].round(2)
b = ols.intercept_.round(2)
title = f'Linear Regression \n y = {m}x + {b}'

# 훈련 데이터로 예측을 합니다.
ans['y_pred'] = ols.predict(ans[['x']])

ans.plot('x', 'y_pred', ax=ax, title=title);



👉 과정 한눈에 보기

profile
기록하지 않으면 기록되지 않는다.

0개의 댓글