본문 바로가기
Analysis/Time series

Lecture 9. 시계열 머신러닝 알고리즘

by 5ole 2021. 3. 27.

정규화 회귀분석 알고리즘 

 

 

  • 정규화 : overfitting 을 막기 위해 파라미터 값을 줄이는 것, 계수의 크기를 제한하는 방법
  • 파라미터 값에 제약을 줌

 

1. Standard Regression

 

standard regression

 

 

  • 식을 최소화하는 베타값을 찾아야 함 - RSS 최소화

 

2. Lidge Regression

 

lidge regression

 

 

 

  • RSS + 페널티식 (제곱합)
  • 베타를 제곱합하므로 큰 베타값에 민감하게 반응함
  • 큰 베타값은 줄여야하므로 하이퍼파라미터(람다)를 크게 하면 가중치값이 작아짐 -> 베타에 0 가까운 값 부여
  • 하이퍼파라미터를 작게 하면 가중치값이 커짐
  • 베타 스케일을 조정해 현실성있는 계수 추정
  • 모든 변수를 사용하기 때문에 계수가 작아지고 모형 복잡도가 줄어들며 계수가 많을수록 효과적이진 않지만 다중공선성을 방지할 수 있음
from sklearn.linear_model import Ridge, Lasso, ElasticNet

fit = Ridge(alpha=0.5, fit_intercept=True, normalize=True, random_state=123).fit(X_train, Y_train)
pred_tr = fit.predict(X_train)
pred_te = fit.predict(X_test)

 

3. Lasso Regression

 

lasso regression

 

 

 

  • RSS + 페널티식 (절대값 합)
  • 베타가 크든지 작든지 무관함
  • 효과가 없는 x를 베타가 0이 되게 만들어 변수 선택 효과
  • 다중공선성 제거 효과 (Ridge에 비해서는 낮음)

 

fit = Lasso(alpha=0.5, fit_intercept=True, normalize=True, random_state=123).fit(X_train, Y_train)
pred_tr = fit.predict(X_train)
pred_te = fit.predict(X_test)

 

4. Elastic Net

 

elastic net

 

 

  • RSS + 페널티식(절대값 합 +  제곱합)
  • Lasso와 Ridge의 장점을 모두 활용하기 위해 사용
  • 적은 데이터셋으로는 효과 낮음

 

fit = ElasticNet(alpha=0.01, l1_ratio=1, fit_intercept=True, normalize=True, random_state=123).fit(X_train, Y_train)
pred_tr = fit.predict(X_train)
pred_te = fit.predict(X_test)

 


 

Bagging과 Boosting

 

 

1. Bagging

 

  • Bias가 낮은 모델들을 통해 variance를 줄임
  • RandomForest : DecisionTree의 CLT

 

# DecisionTree
fit = DecisionTreeRegressor().fit(X_train, Y_train)
pred_tr = fit.predict(X_train)
pred_te = fit.predict(X_test)

# RandomForestRegressor
fit = RandomForestRegressor(n_estimators=100, random_state=123).fit(X_train, Y_train)
pred_tr = fit.predict(X_train)
pred_te = fit.predict(X_test)

 

fit.feature_importances_

# Prediction Effect of Variables
Variable_Importances = pd.DataFrame([fit.feature_importances_], 
                                    columns=X_train_feRSM.columns, 
                                    index=['importance']).T.sort_values(by=['importance'], ascending=False)
display(Variable_Importances)
Variable_Importances.plot.bar(figsize=(12,6), fontsize=15)
plt.title('Variable Importances', fontsize=15)
plt.show()

 

  • 트리가 잘 나눠지는 기준 ( X와 y의 영향력 기준 XX )

 

2. Boosting

 

  • Variance가 낮은 모델들을 합쳐 Bias를 줄임
  • 잔차진단
  • AdaBoost, GBM : 잔차를 분석해 알고리즘 성능을 향상시킴

 

 

# GradientBoostingRegression
fit = GradientBoostingRegressor(alpha=0.1, learning_rate=0.05, loss='huber', criterion='friedman_mse',
                                           n_estimators=1000, random_state=123).fit(X_train, Y_train)
pred_tr = fit.predict(X_train)
pred_te = fit.predict(X_test)

# XGBoost
fit = XGBRegressor(learning_rate=0.05, n_estimators=100, random_state=123).fit(X_train, Y_train)
pred_tr = fit.predict(X_train)
pred_te = fit.predict(X_test)

# LightGMB
fit = LGBMRegressor(learning_rate=0.05, n_estimators=100, random_state=123).fit(X_train, Y_train)
pred_tr = fit.predict(X_train)
pred_te = fit.predict(X_test)

 

 


 

목적별 회귀분석 알고리즘

 

 

  • 특정한 목적이나 한계를 개선하기 위해 만들어진 알고리즘

 

 

 

 

 

 

+ 참고 자료 및 출처

 

  • 김경원 < 파이썬을 활용한 시계열 데이터 분석 A-Z  강의 >  ( 패스트캠퍼스 강의 )

 

댓글