天天看點

模型特征選擇

  RF、GBDT、XGboost都可以做特征選擇,屬于特征選擇中的嵌入式方法。比如在sklearn中,可以用屬性feature_importances_去檢視特征的重要度, 比如:

  1. from sklearn import ensemble
  2. #grd = ensemble.GradientBoostingClassifier(n_estimators=30)
  3. grd = ensemble.RandomForestClassifier(n_estimators= )
  4. grd.fit(X_train,y_train)
  5. grd.feature_importances_

  但是這三個分類器是如何計算出特征的重要度呢?下面來分别的說明一下。

1. 随機森林(Random Forest)

    用袋外資料 (OOB) 做預測。随機森林在每次重抽樣建立決策樹時,都會有一些樣本沒有被選中,那麼就可以用這些樣本去做交叉驗證,這也是随機森林的優點之一。它可以不用做交叉驗證,直接用oob _score_去對模型性能進行評估。

    具體的方法就是:

        1. 對于每一棵決策樹,用OOB 計算袋外資料誤差,記為 errOOB1;

        2. 然後随機對OOB所有樣本的特征i加入噪聲幹擾,再次計算袋外資料誤差,記為errOOB2;

        3. 假設有N棵樹,特征i的重要性為sum(errOOB2-errOOB1)/N;

    如果加入随機噪聲後,袋外資料準确率大幅下降,說明這個特征對預測結果有很大的影響,進而說明它的重要程度比較高

2. 梯度提升樹(GBDT)

    主要是通過計算特征i在單棵樹中重要度的平均值,計算公式如下:

模型特征選擇

其中,M是樹的數量。特征i在單棵樹的重要度主要是通過計算按這個特征i分裂之後損失的減少值

模型特征選擇

其中,L是葉子節點的數量,L-1就是非葉子結點的數量。

3. XGboost

    XGboost是通過該特征每棵樹中分裂次數的和去計算的,比如這個特征在第一棵樹分裂1次,第二棵樹2次……,那麼這個特征的得分就是(1+2+...)。

  RF、GBDT、XGboost都可以做特征選擇,屬于特征選擇中的嵌入式方法。比如在sklearn中,可以用屬性feature_importances_去檢視特征的重要度, 比如:

  1. from sklearn import ensemble
  2. #grd = ensemble.GradientBoostingClassifier(n_estimators=30)
  3. grd = ensemble.RandomForestClassifier(n_estimators= )
  4. grd.fit(X_train,y_train)
  5. grd.feature_importances_

  但是這三個分類器是如何計算出特征的重要度呢?下面來分别的說明一下。

1. 随機森林(Random Forest)

    用袋外資料 (OOB) 做預測。随機森林在每次重抽樣建立決策樹時,都會有一些樣本沒有被選中,那麼就可以用這些樣本去做交叉驗證,這也是随機森林的優點之一。它可以不用做交叉驗證,直接用oob _score_去對模型性能進行評估。

    具體的方法就是:

        1. 對于每一棵決策樹,用OOB 計算袋外資料誤差,記為 errOOB1;

        2. 然後随機對OOB所有樣本的特征i加入噪聲幹擾,再次計算袋外資料誤差,記為errOOB2;

        3. 假設有N棵樹,特征i的重要性為sum(errOOB2-errOOB1)/N;

    如果加入随機噪聲後,袋外資料準确率大幅下降,說明這個特征對預測結果有很大的影響,進而說明它的重要程度比較高

2. 梯度提升樹(GBDT)

    主要是通過計算特征i在單棵樹中重要度的平均值,計算公式如下:

模型特征選擇

其中,M是樹的數量。特征i在單棵樹的重要度主要是通過計算按這個特征i分裂之後損失的減少值

模型特征選擇

其中,L是葉子節點的數量,L-1就是非葉子結點的數量。

3. XGboost

    XGboost是通過該特征每棵樹中分裂次數的和去計算的,比如這個特征在第一棵樹分裂1次,第二棵樹2次……,那麼這個特征的得分就是(1+2+...)。

繼續閱讀