[이론] 모델 비교: Ridge회귀, Bayesian회귀
회귀모델
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 회귀
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 회귀
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