2017-04-04 229 views
1

可以將sklearnRandomForestClassifier的屬性feature_importance_給出的可變重要性值解釋爲百分比?我知道當在分割點使用特定特徵時,其所有樹木的雜質指數降低的平均值。feature_importance_值的範圍是什麼?對於具有1000個特徵的數據集,如果feature_importance_的取值範圍爲0〜0.05,大部分特徵爲0,只有少數表現出輕微增加,這是否表明數據是嘈雜的?隨機森林sklearn變量重要性

回答

3

據我所知,其平均減少雜質指數比所有的樹木當一個特定的功能用於分割點。

這是正確的。讓我們來看看如何詳細計算單個樹的特徵重要性[1]。雜質減少是分裂前節點的雜質減去分裂後兩個子節點雜質的總和。這是針對每個特徵在樹中的所有分割中取平均值的。然後,重要性被標準化:每個特徵重要性除以重要性的總和。

因此,在某種意義上說一棵樹的特徵重要度是百分比。它們總結爲一,描述單個特徵對樹總雜質減少量的貢獻。

隨機森林的功能重要度計算的平均重要性有關的對所有樹木。它們仍然可以被看作單個特徵的分數減少。你可以(也應該)驗證他們是否一對一。

什麼是feature_importance_值的範圍是多少?

在理論上,範圍是0到1,由於方式是重要度歸一化。但是,實際上這個範圍會大大降低。隨機森林隨機挑選數據的特徵和子集,因此很有可能所有特徵都用於分割。即使它們不是非常重要,它們也只佔整個重要性的一小部分。由於重要性應該是一比一,所以重要性會越低越好。

feature_importance_ values的取值範圍爲0〜0.05,大部分特徵爲0,只有少數表現出輕微的增加,這是否表明數據是嘈雜的?

沒有,這很可能意味着你有幾件樣品和/或幾棵樹(估計)。 0的重要性最有可能意味着該特徵在森林中根本不被使用。由於這個分類器的隨機性,至少應該使用所有的特徵。所以這表示沒有執行多次分割。

我假設你沒有很多樹,因爲n_estimators=10的默認值非常低。大多數文獻建議使用100或1000棵樹。你不能有太多,它只會降低性能。

最後,警告

的字不要依賴於功能重要性也不爲過。如果一個特徵具有比另一個更高的重要性,它可能意味着它是更重要的,但你不能確定:

例如,假設你拷貝一個功能,並增加一條,作爲一個新的功能,將數據。原始功能和新功能應該同等重要。但是,每次執行拆分時只能選擇其中的一個,因此原始功能將在一半時間內隨機選擇。這也將原始功能的重要性減半了!如果另一個不在,它們的重要性只有它們的一半。

如果數據中的某些特徵是相關的(實際上是統計相關的),它們的重要性會低於同樣重要的不相關特徵。

+0

非常感謝您的詳細解答。我在每個分割中使用700個'n_estimators'和sqrt(p)個特徵。但我認爲我的樣本數量太少(2789),因爲我用來定義我的數據的數量是1024.我不確定。我會研究這個。再次感謝您抽出時間。 – Kanmani

+0

@chilvandu我大致期望在森林中分裂700 * log2(1024)= 7000'。如果它是純粹隨機的,每個特徵應該被使用〜7次,但分類器不是純粹隨機的 - 它從一些候選者中選擇最好的特徵。我猜可能很容易發生,如果有更好的功能可供選擇,某些功能從未被選中。 2789聽起來像數量很少,但我確信。隨機森林應該能夠處理「無限」維特徵空間。我想這取決於數據中有多少結構/噪音。請詳細調查此問題。 – kazemakase

0

這是否顯示的數據是吵?

你的問題是非常籠統的,如果不查看數據就不可能回答問題。

但是,一個簡單的方法,你可以看看feature_importance_值百分比是歸他們的價值觀:

importance_sum = sum(rf.feature_importance_) 
feature_importance_as_percent = [100*(x/sum) for x in rf.feature_importance_]