决策树中如何计算特征重要性?举个例子
决策树中如何计算特征重要性?举个例子
理解背后的数学
决策树是最流行的 ML 算法之一,它被用作大多数 bagging 和 boosting 技术的弱学习器,无论是 RandomForest 还是 Gradient Boosting。
笔记: 需要围绕决策树的基础知识才能继续前进
决策树的 sklearn 实现的一大优势是 feature_importances_,它可以帮助我们了解哪些特征与其他特征相比实际上是有用的。
但为什么我们首先需要特征重要性?
为此,您需要访问我上一篇关于原因的帖子 人工智能中的可解释性和可解释性 很重要,如果忽略会产生什么后果。
希望您阅读了上面的帖子,我们现在可以继续了解特征重要性计算背后的数学原理。首先假设
我们有一个二元分类问题来预测一个动作是“有效”还是“无效”
我们有 3 个功能,即响应大小、延迟和总展示次数
我们已经在训练数据上训练了一个决策树分类器
训练数据有 2k 个样本,两个类具有相同的表示
所以,我们已经有了一个训练有素的模型。现在我们将跳到计算feature_importance。但在此之前,让我们看看我们训练过的决策树的结构
Trained Decision Tree
训练和预处理的代码片段已被跳过,因为这不是帖子的目标。不过,下面的代码片段可以帮助您像上面一样可视化您的训练模型
将 matplotlib.pyplot 导入为 plt
从 sklearn 导入树 #dt_model 是一个 DecisionTreeClassifier 对象
#df 是训练数据集 fig = plt.figure(figsize=(15,7)) _ = tree.plot_tree(dt_model,feature_names = df.columns,
填充=真)
了解几个参数
基尼指数 用作杂质测量。
上图中的值是每个节点上两个类的总样本,即如果 value=[24,47],当前节点从类 1 接收到 24 个样本,从类 2 接收到 47 个样本。
计算特征重要性涉及 2 个步骤
计算每个节点的重要性
使用该特征上的节点重要性拆分计算每个特征的重要性
因此,为了计算特征重要性,我们首先需要计算决策树中每个节点的重要性。
怎么做?
重要性_节点ₖ =
_(%of_sample_reaching_Nodeₖ X Impurity_Nodeₖ -
_%of_sample_reaching_left_subtree_NodeₖX Impurity_left_subtree_Nodeₖ-
_%of_sample_reaching_right_subtree_NodeₖX Impurity_right_subtree_Nodeₖ) / 100
让我们计算每个节点的重要性(左→右,上→下)
- 第一个节点:值=[1000,1000]
=(100 x 0.5 — 52.35 x 0.086 —47.65 x 0) / 100
=(50–4.5)/100 = 0.455
我们如何在上述等式中得到 100、52.35 和 47.65?
100*2000/2000=100%
100*1047/2000(左子树)= 52.35%
100*953/2000(左子树)= 47.65%
其余节点遵循相同的逻辑
- 第二个节点:值=[1000,47]
=( 52.35 x 0.086 — 48.8 x 0 — 0.035 x 0.448)/100
= 4.48/100=0.0448
- 第三个节点:值=[24,47]
= ( 0.035 x 0.448–0.024x0.041–0)
= 0.014/100 = 0.00014
:第 4 个节点:值 = [1,47]
=(0.024x0.041–0–0)/100
=0.0000098
第一步完成了,我们现在开始计算每个特征的特征重要性。
公式很简单,
特征 K= 的特征重要性
Σnode 对特征 K / Σ 所有节点的重要性的重要性拆分
这意味着分子是所有节点重要性的总和,这些节点在所有节点重要性的总和上分裂在特定特征 K
重要性总展示次数:
由于总印象数上只有第一个节点分裂,在分子中我们将只考虑第一个节点的节点重要性
=0.455/ (0.00098+0.00014+0.0448+0.455)
=0.455/0.5=0.91
重要性总响应大小:
考虑分子中的第二和第三节点
(0.048+0.00014)/ (0.00098+0.00014+0.0448+0.455)
=0.062/0.5=0.124
重要性延迟:
0.00098/ (0.00098+0.00014+0.0448+0.455)
=0.00098/0.5=0.002
因此,我们可以看到总展示次数是最关键的特征,其次是总响应大小。
我们的答案是否与 python 给出的答案相符?
正如我们所看到的,该值在条形图中看起来 lumsum 相同。
这是一个包装 !!
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明