我最近一直在使用feature_importance_
模型,而且它们对1st and 2nd attributes
属性非常有用!
了解哪些变量更能预测特定目标会很有用。
例如,如果target 0
更能预测错误3rd and 4th attributes
,但target 1
更能预测feature_importance_
,该怎么办?
有没有办法分别为每个目标获取sklearn
数组?使用scipy
,pandas
,numpy
或{{ 1}}最好。
# Iris dataset
DF_iris = pd.DataFrame(load_iris().data,
index = ["iris_%d" % i for i in range(load_iris().data.shape[0])],
columns = load_iris().feature_names)
Se_iris = pd.Series(load_iris().target,
index = ["iris_%d" % i for i in range(load_iris().data.shape[0])],
name = "Species")
# Import modules
from sklearn.ensemble import RandomForestClassifier
from sklearn.cross_validation import train_test_split
# Split Data
X_tr, X_te, y_tr, y_te = train_test_split(DF_iris, Se_iris, test_size=0.3, random_state=0)
# Create model
Mod_rf = RandomForestClassifier(random_state=0)
Mod_rf.fit(X_tr,y_tr)
# Variable Importance
Mod_rf.feature_importances_
# array([ 0.14334485, 0.0264803 , 0.40058315, 0.42959169])
# Target groups
Se_iris.unique()
# array([0, 1, 2])
答案 0 :(得分:1)
这不是RF的工作原理。由于没有简单的特色投票" (这发生在线性模型中)很难回答问题是什么"特征X更能预测目标Y"甚至意味着。 RF捕获的重要性是什么?一般来说,在决策过程中使用此功能的可能性是多少?#34;。解决问题的一个问题是,如果你问一下,在一般情况下,在决策过程中使用此功能的可能性导致标签Y "你必须运行相同的程序,但删除叶子中不包含标签Y的所有子树 - 这样你就可以删除不能解决问题的部分决策过程"是Y还是不是Y&# 34;而是试着回答哪个"而不是Y"它是。然而,在实践中,由于RF的非常随机性,削减其深度等,这可能几乎不会减少任何东西。坏消息是,我从未见过它在任何标准RF库中实现,你可以自己做,就像我说的那样:
for i = 1 to K (K is number of distinct labels)
tmp_RF = deepcopy(RF)
for tree in tmp_RF:
tree = remove_all_subtrees_that_do_not_contain_given_label(tree, i)
for x in X (X is your dataset)
features_importance[i] += how_many_times_each_feature_is_used(tree, x) / |X|
features_importance[i] /= |tmp_RF|
return features_importance
特别是您可以使用现有的feature_importance代码,只需执行
即可for i = 1 to K (K is number of distinct labels)
tmp_RF = deepcopy(RF)
for tree in tmp_RF:
tree = remove_all_subtrees_that_do_not_contain_given_label(tree, i)
features_importance[i] = run_regular_feature_importance(tmp_RF)
return features_importance