본문 바로가기
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

    댓글