데이터 분석/머신러닝

[이론] 모델 비교: Ridge회귀, Bayesian회귀

toraa 2025. 1. 15. 15:46

회귀모델

https://scikit-learn.org/stable/supervised_learning.html

 

1. Supervised learning

Linear Models- Ordinary Least Squares, Ridge regression and classification, Lasso, Multi-task Lasso, Elastic-Net, Multi-task Elastic-Net, Least Angle Regression, LARS Lasso, Orthogonal Matching Pur...

scikit-learn.org

 

Ridge 회귀

https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge

 

Ridge

Gallery examples: Compressive sensing: tomography reconstruction with L1 prior (Lasso) Prediction Latency Comparison of kernel ridge and Gaussian process regression HuberRegressor vs Ridge on datas...

scikit-learn.org

 

Ridge 정규화를 추가하여 다음과 같은 공식으로 오차가 최소가 되는 방향으로 가중치를 업데이트

가중치가 학습이 되어 영향을 미치게 만듦

W의 제곱을 더함으로 W의 변동폭을 줄이고, 안정적인 W값을 구성할 수 있어 다중공선성의 문제를 완화

 

선형을 사용하면 변수 중 두개가 상관관계 계수가 매우 높게 나올수 있음

여기에 너무 민감하게 반응을 하게 됨(조금만 달라져도 예측하기 힘들어함)

다중공선성 문제

 

 

Bayesian 회귀

https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.BayesianRidge.html#sklearn.linear_model.BayesianRidge

 

BayesianRidge

Gallery examples: Feature agglomeration vs. univariate selection Comparing Linear Bayesian Regressors Curve Fitting with Bayesian Ridge Regression L1-based models for Sparse Signals Imputing missin...

scikit-learn.org

 

확률적인 관점을 적용

alpha값을 사용자가 조정하여 설정할 수 있음

여러번 학습을 반복해서 어떤 파라미터를 넣는게 좋을지 찾음

 

#경험적 방식이 중요함. 여러가지 모델들을 사용해서 비교분석해보는 것이 필요.

#어떤 모델이 좋을지, 파라미터를 어떤 것을 선택할지 여러 경험이 필요함!

 

 

회귀 모델 학습 및 평가

다중 공선성 가능성 확인

import seaborn as sns

plt.rc('font', family='Malgun Gothic')
sns.heatmap(df.corr(), cmap='YlGnBu', annot=True, fmt='.2f')
plt.show()

릿지회기 모델 학습

from sklearn import linear_model

rg = linear_model.Ridge(alpha=200,)
rg.fit(train_X, train_Y)
rg.coef_


array([-0.01177413,  0.06333978,  0.00195539,  0.02706657,  0.00400795,
        0.00790084,  0.00449019])

 

베이지안 릿지회기 모델 학습

from sklearn import linear_model

br = linear_model.BayesianRidge()
br.fit(train_X, train_Y)
br.coef_


array([-0.0117639 ,  0.06319192,  0.00211472,  0.02692402,  0.00400872,
        0.00789296,  0.0044888 ])

알파값을 직접적으로 넣을 필요 없음

 

평가하기

릿지회귀에서 평가지표 확인

from sklearn.metrics import mean_absolute_error, r2_score

predicts = rg.predict(test_X)
mae = mean_absolute_error(test_Y, predicts)
r2 = r2_score(test_Y, predicts)
print(f'릿지회귀 mae:{mae}, r2:{r2}')

plt.figure(figsize = (20,10))
plt.plot(range(500),test_Y[:500])
plt.plot(range(500),predicts[:500])
plt.show()


릿지회귀 mae:0.9652724788117591, r2:0.3381723790458445

 

베이지안 릿지회귀 평가지표 확인

predicts = br.predict(test_X)
mae = mean_absolute_error(test_Y, predicts)
r2 = r2_score(test_Y, predicts)
print(f'베이지안 릿지회귀 mae:{mae}, r2:{r2}')

plt.figure(figsize = (20,10))
plt.plot(range(500),test_Y[:500])
plt.plot(range(500),predicts[:500])
plt.show()


베이지안 릿지회귀 mae:0.965283737358738, r2:0.3381524952032883

 

 

 

[주로 사용하는 것 - 사이트에서 사용방법 익히기!]

Lasso

Elastic-Net

Logistic regression은 회귀x. 분류에 사용.

SGD