超级决策树

本文介绍了信息增益、增益率和基尼指数用于衡量数据集纯度的方法,通过西瓜数据集实例展示了如何计算这些指标。信息增益适用于取值较多的特征,而基尼指数在小数据集和不均匀分布时表现更好,适用于分类和回归问题的选择
摘要由CSDN通过智能技术生成

一、信息增益

信息熵:Ent(D)=- \sum_{k=1}^{n}p_{k}log_{2}p_{k} (样本集D中第k类样本所占比例为p_{k})               Ent(D)值越小,则D的纯度越高

信息增益:Gain(D,a)=Ent(D)-\sum_{1}^{m}\frac{D_{m}}{D}Ent(D_{m})                                                          信息增益越大,则利用属性a来划分所获得的‘纯度提升’越大

二、增益率

增益率:Gainratio(D,a)=Gain(D,a)/IV(a)

IV(a)=-\sum_{1}^{v}IV(a)=-\sum_{1}^{v}\frac{D_{v}}{D}log_{2}\frac{D_{v}}{D}                                                                                   属性a的可能取值数目越多,IV(a)的值通常越大

增益率对可取数目较少的属性有所偏好,不直接选择增益率最大的,而是先从候选划分属性中找出信息增益高于平均水平的属性

三、基尼指数

基尼值: Gini(D)= \sum_{1}^{k}\sum_{k'}p_{k}p_{k'}=1-\sum_{1}^{k}p_{k}^{2}                                                              Gini(D)越小,则数据集D的纯度越高

属性a的基尼指数:Gini(D,a)=\sum_{1}^{v}\frac{D_{v}}{D}Gini(D_{v})

四、西瓜例子

以西瓜数据集为例

 编号  色泽  根蒂  敲声  纹理  脐部  触感 好瓜
      1  青绿  蜷缩  浊响  清晰  凹陷  硬滑  是
      2  乌黑  蜷缩  沉闷  清晰  凹陷  硬滑  是
      3  乌黑  蜷缩  浊响  清晰  凹陷  硬滑  是
      4  青绿  蜷缩  沉闷  清晰  凹陷  硬滑  是
      5  浅白  蜷缩  浊响  清晰  凹陷  硬滑  是
      6  青绿  稍蜷  浊响  清晰  稍凹  软粘  是
      7  乌黑  稍蜷  浊响  稍糊  稍凹  软粘  是
      8  乌黑  稍蜷  浊响  清晰  稍凹  硬滑  是
      9  乌黑  稍蜷  沉闷  稍糊  稍凹  硬滑  否
    10  青绿  硬挺  清脆  清晰  平坦  软粘  否                                                                                           11   浅白  硬挺  清脆  模糊  平坦  硬滑  否
    12  浅白  蜷缩  浊响  模糊  平坦  软粘  否
    13  青绿  稍蜷  浊响  稍糊  凹陷  硬滑  否
    14  浅白  稍蜷  沉闷  稍糊  凹陷  硬滑  否
    15  乌黑  稍蜷  浊响  清晰  稍凹  软粘  否
    16  浅白  蜷缩  浊响  模糊  平坦  硬滑  否
    17  青绿  蜷缩  沉闷  稍糊  稍凹  硬滑  否

import numpy as np
import pandas as pd
import math
data = pd.read_csv('watermalon.csv')

熵的计算函数: 

def info(x,y):
    if x != y and x != 0:
        # 计算当前情况的熵
        return -(x/y)*math.log2(x/y) - ((y-x)/y)*math.log2((y-x)/y)
    if x == y or x == 0:
        # 纯度最大,熵值为0
        return 0

信息增益计算:(选择信息增益大的作为分类属性)

#根蒂的信息增益
gendi_entropy = (8/17)*info(5,8)+(7/17)*info(3,7)+(2/17)*info(0,2)
gain_col = info_D - gendi_entropy
#敲声的信息增益
qiaosheng_entropy = (10/17)*info(6,10)+(5/17)*info(2,5)+(2/17)*info(0,2)
info_gain = info_D - qiaosheng_entropy
#纹理的信息增益
wenli_entropy = (9/17)*info(7,9)+(5/17)*info(1,5)+(3/17)*info(0,3)
info_gain = info_D - wenli_entropy

  根蒂的信息增益:0.142674959566                                                                                                   敲声的信息增益:0.140781433614                                                                                                   纹理的信息增益:0.380591897368 

基尼指数计算:(选择基尼指数小的作为分类属性)

def info(x,y):
    if x != y and x != 0:
        return 1 - (x/y)*(x/y) - ((y-x)/y)*((y-x)/y)
    if x == y or x == 0:
        return 0
gendi_Gini=(8/17)*gini(5,8)+(7/17)*gini(3,7)+(2/17)*gini(0,2)

qiaosheng_Gini=(10/17)*gini(6,10)+(5/17)*gini(2,5)+(2/17)*gini(0,2)

wenli_Gini = (9/17)*gini(7,9)+(5/17)*gini(1,5)+(3/17)*gini(0,3)

根蒂的基尼指数:0.42226891                                                                                                       敲声的基尼指数:0.42352941                                                                                                       纹理的基尼指数:0.27712419 

五、分析总结

总结:

信息增益倾向于选择取值较多的特征,可以通过增加数据的多样性来减少信息的不确定性;基尼指数在小数据上表现更稳定,关注的是数据集的不纯度

通常在分类问题上使用信息增益较多,回归问题使用基尼指数较多

数据集小、特征取值分布不均匀,基尼指数较好;数据集大、特征取值分布均匀,信息增益较合适

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值