**:
我們知道,隨機森林大致可以看成是從生成的多個決策樹種挑選最優的那一棵。所以在訓練的過程中就會按照不同特徵維度的先後劃分方式來建立決策樹。因此,最優那棵樹所對應的特徵劃分順序也就代表著特徵的重要程度。
看例子:
from sklearn.datasets import load_wine
from sklearn.ensemble import randomforestclassifier
from sklearn.model_selection import train_test_split
import numpy as np
data=load_wine()
x_train,x_test,y_train,y_test=train_test_split(data.data,data.target,test_size=0.3,random_state=22)
forest=randomforestclassifier(n_estimators=10,n_jobs=-1,random_state=9)
forest.fit(x_train,y_train)
importances=forest.feature_importances_
print('每個維度對應的重要性因子:\n',importances)
indices = np.argsort(importances)[::-1]# a[::-1]讓a逆序輸出
print('得到按維度重要性因子排序的維度的序號:\n',indices)
most_import = indices[:3]#取最總要的3個
print(x_train[:,most_import])
>>
每個維度對應的重要性因子:
[0.17340555
0.00990344
0.01416615
0.00880821
0.05553781
0.03865726
0.08544822
0.01149787
0.0478397
0.10337597
0.08948192
0.0930718
0.26880612]
得到按維度重要性因子排序的維度的序號:
[1209
111064
8527
13]
我們可以看到,最重要的是第12維,依次是第0維,9維。
另外說一下,原文中的維度對應關係應該室友錯誤的。
print("%2d) %-
*s%f" % (f + 1, 30, feat_labels[f], importances[indices[f]]))
當f=0
時,indices[f]=12
,此時importances[12]
對應的就是最後乙個特徵,而feat_labels[0]
卻指的是第乙個特徵。 隨機森林計算特徵重要性推導
呼叫了sklearn函式包中randomforestregressor.feature importances 函式計算特徵重要性。隨機森林 randomforest 是由一棵棵決策樹 decision tree 組成,因此為了求得每個特徵的重要性,首先需要知道每個特徵在每一棵決策樹上所做的貢獻量,...
隨機森林,隨機森林中進行特徵重要性
用有抽樣放回的方法 bootstrap 從樣本集中選取n個樣本作為乙個訓練集 用抽樣得到的樣本集生成一棵決策樹。在生成的每乙個結點 隨機不重複地選擇d個特徵 利用這d個特徵分別對樣本集進行劃分,找到最佳的劃分特徵 可用基尼係數 增益率或者資訊增益判別 重複步驟1到步驟2共k次,k即為隨機森林中決策樹...
xgboost和隨機森林特徵重要性計算方法
隨機森林中特徵重要性和xgboost不同 隨機森林中的特徵重要性主要是基於不純度 也可以叫做gini importance 計算某乙個節點不純度為 其中,k omega k k le ft omega left ri ght omega right 分別為節點k以及其左右子節點中訓練樣本個數與總訓練...