我有一组NumPy
数组的功能。
RandomForestRegressor
中的 Scikit-Learn
会返回feature_importances_
,其中包含所有要素的重要性值。
我需要对NumPy
数组进行切片,以便只删除最重要的50个要素和其他列。
我怎样才能轻松完成?
答案 0 :(得分:0)
如果我理解正确,你要找的是argsort。它会以递增的顺序将索引返回到排序的数组中。举个例子:
import numpy as np
from sklearn.ensemble import RandomForestRegressor as RFR
# Create a random number generator so this example is repeatable
rs = np.random.RandomState(seed=1234)
# create 100 fake input variables with 10 features each
X = rs.rand(100, 10)
# create 100 fake response variables
Y = rs.rand(100)
rfr = RFR(random_state=rs)
rfr.fit(X, Y)
fi = rfr.feature_importances_
# argsort the feature importances and reverse to get order of decreasing importance
indices = argsort(fi)[::-1]
indices
现在按照降低要素重要性的顺序包含输入变量的索引。
In: print indices
[7 6 3 4 5 0 1 9 2 8]
In: print fi[indices]
[ 0.22636046 0.19925157 0.17233547 0.09245424 0.08287206 0.0800437
0.07174068 0.05554476 0.01044851 0.00894855]
通过适当切片保持输入变量中的第一个n
最重要的导入功能:
X[:, indices[:n]] # n most important features