본문 바로가기
Study/ML

10. 회귀(Regression) - 로지스틱 회귀, 회귀 트리

by 까망우동 2023. 5. 31.
반응형

Index

● Logistic Regression (로지스틱 회귀) 

  • 모델의 모형은 선형회귀와 비슷하지만 (입력변수가 Continous 하고, 회귀계수가 선형) 예측하고자 하는 종속변수가 {0,1} 의 Binary 한 값이기 때문에 Binary Classification, 분류모델에 해당한다. 
  • 하지만 결국 continuous한 P(Y=1 | X) 조건부 확률에 대한 분포를 예측하는 것이기 때문에 Regression이기도 하다. 
  • LR의 회귀식은 X 의 선형결합식에 Sigmoid 를 씌워 (0,1) 사이의 값으로 만든다. (Logistic function 이라고도 부름) 

  • Cost function : 일반 회귀에서는 MSE를 활용했다면, 로지스틱회귀는 분류 문제이기 때문에 Cross-Entropy 활용한다. 

1이면 1에 가까울수록, 0이면 0에 가까울수록 cost가 0으로 수렴한다.

  • 목적함수에 Sigmoid가 들어가면서 비선형함수이기 때문에 최적화를 위해 gradient 계열의 solver인 lbfgs가 주로 쓰임
    lr_clf = LogisticRegression(solver=lbfgs, max_iter=600)

 

● Regression Tree (회귀트리) -  CART

  • 일반적인 회귀모델은 최적의 회귀계수/회귀함수를 찾는것을 목적으로 학습했다. 반면, 회귀트리는 회귀함수를 기반으로 하지 않고, 결정트리와 같은 트리를 기반으로 한다. 
  • 분류트리와의 차이점 ① leaf node 의 값이, 분류에서는 레이블의 특정 클래스값인데, 회귀에서는 해당 리프에 속한 데이터의 평균값이다. ② 규칙노드의 분류 기준이, 분류에서는 데이터의 균일도였다면, 회귀에서는 분산의 최소화이다. 
  • 일반적인 회귀에서는 최적화된 회귀함수의 회귀계수를 반환했다면, 회귀트리에서는 피쳐별 중요도를 feature_importances_ 로 반환한다. 

Regression Tree

    from sklearn.tree import DecisionTreeRegressor
    from sklearn.ensemble import GradientBoostingRegressor
    from xgboost import XGBRegressor
    from lightgbm import LGBMRegressor

    dt_reg = DecisionTreeRegressor(random_state=0, max_depth=4)
    rf_reg = RandomForestRegressor(random_state=0, n_estimators=1000)
    gb_reg = GradientBoostingRegressor(random_state=0, n_estimators=1000)
    xgb_reg = XGBRegressor(n_estimators=1000)
    lgb_reg = LGBMRegressor(n_estimators=1000)
 
    def get_model_cv_prediction(model, X_data, y_target):
        neg_mse_scores = cross_val_score(model, X_data, y_target, scoring="neg_mean_squared_error", cv = 5)
        rmse_scores  = np.sqrt(-1 * neg_mse_scores)
        avg_rmse = np.mean(rmse_scores)
        print('##### ',model.__class__.__name__ , ' #####')
        print(' 5 교차 검증의 평균 RMSE : {0:.3f} '.format(avg_rmse))

    # 트리 기반의 회귀 모델을 반복하면서 평가 수행
    models = [dt_reg, rf_reg, gb_reg, xgb_reg, lgb_reg]
    for model in models:  
        get_model_cv_prediction(model, X_data, y_target)
 
    # 트리 기반 모델의 feature importance 시각화
    feature_series = pd.Series(data=rf_reg.feature_importances_, index=X_data.columns )
    feature_series = feature_series.sort_values(ascending=False)
    sns.barplot(x= feature_series, y=feature_series.index)
반응형

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

12. 군집화(Clustering)  (0) 2023.06.05
11. 차원축소(PCA,LDA,SVD)  (0) 2023.06.01
9. 회귀(Regression) - 선형회귀  (0) 2023.05.31
8. 베이지안 최적화(Bayesian Optimization)  (0) 2023.05.30
지니계수  (0) 2023.05.28

댓글