美文网首页机器学习与数据挖掘机器学习杂文
树模型中特征重要性是如何计算的

树模型中特征重要性是如何计算的

作者: yangy_fly | 来源:发表于2019-08-20 11:10 被阅读0次

使用sklearn里决策树的包,以及iris的数据集,使用基尼系数作为切割点划分依据

  • 数据集如下


    image.png
  • 构建决策树,使用gini系数作为切割参数,决策数为cart树。生成的树结构如下
屏幕快照 2019-08-22 下午2.11.34.png
  • 计算个特征的重要性

f1 = 0.49*7 - 0.375*4 + 0.5*2 + 0.444*3 = 4.262
f2 = 0
f3 = 0.459*14 - 0.49*7 - 0.245*7 = 1.281
f4 = 0.245*7 - 0.444*3 + 0.375*4 - 0.5*2 = 0.883

  • 这棵树总的不纯减少量为4.262+1.281+0.883=6.426

  • 经过归一化后,各特征的重要性分别如下:
    f1_importance = 4.262/6.426=0.663
    f2_importance = 0
    f3_importance = 1.281/6.426=0.2
    f4_importance = 0.883/6.426=0.137

  • 使用代码跑出来的特征重要性如下
from sklearn.tree import DecisionTreeClassifier

train_df = pd.DataFrame(
    [[1, 1, 1, 1, 0],
     [1, 1, 1, 2, 0],
     [2, 1, 1, 1, 1],
     [3, 2, 1, 1, 1],
     [3, 3, 2, 1, 1],
     [3, 3, 2, 2, 0],
     [2, 3, 2, 2, 1],
     [1, 2, 1, 1, 0],
     [1, 3, 2, 1, 1],
     [3, 2, 2, 1, 1],
     [1, 2, 2, 2, 1],
     [2, 2, 1, 2, 1],
     [2, 1, 2, 1, 1],
     [3, 2, 1, 2, 0],
    ], columns=['f1', 'f2', 'f3', 'f4', 'label'])

X, y = train_df[['f1', 'f2', 'f3', 'f4']].values, train_df['label']

clf = DecisionTreeClassifier(criterion='gini')
clf.fit(X,y)
print(clf.feature_importances_)

# 特征重要性
[0.66296296 0.         0.2        0.13703704]

对于boosting模型,则其特征重要性是每棵树单独特征重要性后的加权平均值

相关文章

网友评论

    本文标题:树模型中特征重要性是如何计算的

    本文链接:https://www.haomeiwen.com/subject/qjbusctx.html