ML) Ridge Regression

2022. 8. 29. 22:44ML_DL/ML

  • 범주형데이터
    • OneHotEncoder
  • 정규화모델
    • Ridge Regression
      • Lambda, Alpha, t
      • RidgeCV
      • SelectKBest

범주형데이터

https://horae.tistory.com/entry/범주형수치형이상형연속형명목형순서형-정리

 

범주형,수치형,이상형,연속형,명목형,순서형 정리

출처: KQTI 오늘은 기본적인 데이터의 종류에 대해서 알아보도록 하겠습니다. 데이터의 종류를 알아보는 것은 데이터 수집시 어떤 유형으로 수집하는 것이 좋은지를 설정하는 것부터 분석이나

horae.tistory.com

순서형 : 만족도 (1~5) , 성적등급(1~9)

Q) 범주형데이터는 컴퓨터가 어떻게 처리하게 해야할까?

Onehotencoding

**주의점 및 문제점**

  1. Onehotencoding이 아닌 순서형 encoding(1~N)으로 하는 경우, 컴퓨터는 자체적으로 숫자의 대소를 비교하기 때문에 논리적인 오류가 발생한다.
  2. 집합의크기 ( Cardinality ) 이 매우 큰 경우 onehotencoding을 진행하면 무수한 컬럼이 발생한다.
  3. 예 ) 편의점에서 결제한 시간 내역

<OneHotEncoding 예제>

df = pd.DataFrame({
    'City': ['Seoul', 'Seoul', 'Seoul', 'Busan', 'Busan', 'Busan', 'Incheon', 'Incheon', 'Seoul', 'Busan', 'Incheon'],
    'Room': [3, 4, 3, 2, 3, 3, 3, 3, 3, 3, 2],
    'Price': [55000, 61000, 44000, 35000, 53000, 45000, 32000, 51000, 50000, 40000, 30000]
})

## get_dummies 를 사용한 원핫인코딩
df_oh = pd.get_dummies(df, prefix=['City'])

## 불필요한 요소를 없인 더미 코딩
df_dum = pd.get_dummies(df, prefix=['City'], drop_first=True)
df_dum

## Initialize LinearRegression
model_oh = LinearRegression()

# 모델 학습(fit)
model_oh.fit(df_oh[['City_Seoul','City_Busan','City_Incheon']], df_oh['Price'])

## model coef_, intercept_
print("coefficients: ", model_oh.coef_)
print("intercept:" , model_oh.intercept_)

# 더미 코딩
model_dum = LinearRegression()
model_dum.fit(df_oh[['City_Seoul', 'City_Incheon']], df_oh['Price'])
print("coefficient: ", model_dum.coef_)
print("intercept: ", model_dum.intercept_)

Q) 밑 더미코딩을 통해서 학습한 모델은 테스트 입력값이 City라는 컬럼에 대해서 서울 혹은 인천이 아니라면 어떻게 될까? ( 부산도 아닌 경우 )

-이런 경우에 대비해서 만든것 아닐까? 즉, 서울과 인천이 아닌 모든 지역에 대해서 판단을 내리는 것 같다.

< 정규화모델 >

회귀계수(기울기)에 있어서 제약을 걸어줌으로 오히려 미흡 학습을 유도하는 것 = 과적합을 방지하기 위해서

과적합을 방지한다 → 분산을 줄인다 → (Trade Off) → 편향이 커진다

= 단순화

lambda 식을 왜 추가했는지를 생각해보면, lambda 의 크기에 따른 과소적합, 과적합 상태를 쉽게 이해가 가능하다.

lambda 식이 없으면??

OLS와 동일하다.

⇒ 우리는 과적합을 줄이기 위해서, Ridge를 사용한다

⇒ 기존에는 과적합을 신경쓰지 않았다

⇒ 분산은 상관없으니 Bias 값을 최대한 낮추자

정규화 모델이란 : Bias값이 증가해도 좋으니, Variance를 좀 안정화 시켜보자.

다양한 정규화 모델이 있는데 이를 나누는 기준은 뭘까?

어떠한 조건(제약)을 어떻게 걸 것인가

Ridge Regression

@ https://wiki.mathnt.net/index.php?title=파일:1999008-p108.gif

2차 원뿔 방정식 → 판별식 “D” → D의 범위에 따라서 단면적의 형태가 결정이 된다.

D값의 따라서,

타원, 포물선,쌍곡선

원 (타원의 특별한 경우) 이 나온다.

해당 식은 원의 방정식이다. $\sqrt{t}$ 는 반지름

**하나가 결정이 되면, 다른 하나도 자연스럽게 결정이 된다.**

 

특성 선택 방법

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)

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

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

어떤 변형을 일으키는 행렬을 만든다 ⇒ selector = ~~

해당 행렬의 원소값을 조절한다 ⇒ fit

행렬을 통해서 어떤 데이터를 변형 시킨다 ⇒ transform

f_regerssion = F-statics, P-value를 반환한다. 해당 값들을 통해 feature 별 가중치를 부여하는 것이라고 생각되어짐.

K는 어떻게 구하나?

alpha는 어떻게 구하는가?

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']) # Train 값들을 넣어줄것임.
print("alpha: ", ridge.alpha_)
print("best score: ", ridge.best_score_)

CV = 교차검증 횟수

Best_Score = 설명 할 수 있는 정도의 지표

'ML_DL > ML' 카테고리의 다른 글

ML) CrossValidation  (0) 2022.08.30
ML) Metrics  (0) 2022.08.29
ML) Logistic Regression  (0) 2022.08.29
ML) Multiple Regression  (0) 2022.08.29
ML) 선형회귀 ( Linear Regression )  (0) 2022.08.25