Python根据feature_importances_切片NumPy数组

时间:2015-02-14 19:25:38

标签: python arrays numpy scikit-learn

我有一组NumPy数组的功能。

RandomForestRegressor中的

Scikit-Learn会返回feature_importances_,其中包含所有要素的重要性值。

我需要对NumPy数组进行切片,以便只删除最重要的50个要素和其他列。

我怎样才能轻松完成?

1 个答案:

答案 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