如何在决策树中获取特征重要性?

Posted

技术标签:

【中文标题】如何在决策树中获取特征重要性?【英文标题】:How to get feature importance in Decision Tree? 【发布时间】:2019-01-11 22:16:45 【问题描述】:

我有一个评论数据集,其类别标签为正面/负面。我正在将决策树应用于该评论数据集。首先,我正在转换成一个词袋。这里 sorted_data['Text'] 是评论,final_counts 是稀疏矩阵。

我将数据拆分为训练和测试数据集。

X_tr, X_test, y_tr, y_test = cross_validation.train_test_split(sorted_data['Text'], labels, test_size=0.3, random_state=0)

# BOW
count_vect = CountVectorizer() 
count_vect.fit(X_tr.values)
final_counts = count_vect.transfrom(X_tr.values)

如下应用决策树算法

# instantiate learning model k = optimal_k
# Applying the vectors of train data on the test data
optimal_lambda = 15
final_counts_x_test = count_vect.transform(X_test.values)
bow_reg_optimal = DecisionTreeClassifier(max_depth=optimal_lambda,random_state=0)

# fitting the model
bow_reg_optimal.fit(final_counts, y_tr)

# predict the response
pred = bow_reg_optimal.predict(final_counts_x_test)

# evaluate accuracy
acc = accuracy_score(y_test, pred) * 100
print('\nThe accuracy of the Decision Tree for depth = %f is %f%%' % (optimal_lambda, acc))

bow_reg_optimal 是一个决策树分类器。谁能告诉我如何使用决策树分类器获得特征重要性

【问题讨论】:

【参考方案1】:

使用feature_importances_ 属性,该属性将在调用fit() 时定义。例如:

import numpy as np
X = np.random.rand(1000,2)
y = np.random.randint(0, 5, 1000)

from sklearn.tree import DecisionTreeClassifier

tree = DecisionTreeClassifier().fit(X, y)
tree.feature_importances_
# array([ 0.51390759,  0.48609241])

【讨论】:

bow_reg_optimal.feature_importances_ 我得到的输出是array([ 0., 0., 0., ..., 0., 0., 0.])。为什么我全是零? 重要性加起来为 1。如果这是您得到的输出,那么主要特征可能不在前三个或后三个中,而是在中间的某个位置。 好的。知道了。非常感谢。 @jakevdp 我想知道为什么***的不是主要功能?

以上是关于如何在决策树中获取特征重要性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在回归树中计算特征重要性?

如何使用决策树中的 feature_importances_ 删除所有非零重要特征?

决策树中的特征重要性、离散化和标准

决策树中的特征重要性、离散化和标准

决策树的特征重要性提取(scikit-learn)

线性回归系数与决策树特征重要性之间的关系