隨機森林算法(RandomForest)的輸出有一個變量是 feature_importances_ ,翻譯過來是 特征重要性,具體含義是什么,這里試着解釋一下。
參考官網和其他資料可以發現,RF可以輸出兩種 feature_importance,分別是Variable importance和Gini importance,兩者都是feature_importance,只是計算方法不同。
Variable importance
選定一個feature M,在所有OOB樣本的feature M上人為添加噪聲,再測試模型在OOB上的判斷精確率,精確率相比沒有噪聲時下降了多少,就表示該特征有多重要。
假如一個feature對數據分類很重要,那么一旦這個特征的數據不再准確,對測試結果會造成較大的影響,而那些不重要的feature,即使受到噪聲干擾,對測試結果也沒什么影響。這就是 Variable importance 方法的朴素思想。
[添加噪聲:這里官網給出的說法是 randomly permute the values of variable m in the oob cases,permute的含義我還不是很確定,有的說法是打亂順序,有的說法是在數據上加入白噪聲。]
Gini importance
選定一個feature M,統計RF的每一棵樹中,由M形成的分支節點的Gini指數下降程度(或不純度下降程度)之和,這就是M的importance。
兩者對比來看,前者比后者計算量更大,后者只需要一邊構建DT,一邊做統計就可以。從sklearn的官方文檔對feature_importances_參數的描述來看,sklearn應當是使用了Gini importance對feature進行排序,同時sklearn把所有的Gini importance以sum的方式做了歸一化,得到了最終的feature_importances_輸出參數。
參考文獻:
RandomForest 官網 https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm