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

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

作者: 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