机器学习-决策树属性分类方法公式

主要简单介绍了ID3、C4.5、CART决策树如何确定不同属性的顺序。
ID3:信息熵增益
C4.5:增益率
CART:gini不纯度
1. ID3
信息熵计算:
H = sum(-Pi*log2(Pi))
例子:

sexagelabel
050
1101
051
0100

首先看label的信息熵:label分为两类:概率都是1/2,则:-2/4log2(2/4)+(-2/4)log(2/4)=1
age的信息熵:age主要有5,10两类,对于age=5,-1/2
log2(1/2)+(-1/2)log(1/2)=1,
同样对于10而言:-1/2
log2(1/2)+(-1/2)log(1/2)=1,那么:对于age整体的信息熵:
1/2
1+1/2
1=1,信息增益=label信息熵-age信息熵 = 0
同样可以计算对于sex的信息熵:-1/1log(1/1)=0;-2/3log2(2/3)+(-1/3)log2(1/3)
总体sex熵为:1/4
0+3/4*(-2/3log2(2/3)+(-1/3)log2(1/3))=0.688
根据信息熵增益,则属性sex在前,age在后。
2. C4.5
C4.5主要为解决ID3熵等于label熵的情况问题,对于极端数据,如:上述表格,新增一列,为class,class取值分别为1,2,3,4;那么根据计算熵的公式情况:其对应的熵均为:
-1/1
log2(1/1)=0,从而class的信息增益为1;显然class在前不是最好的分类顺序,因此提出了信息增益率的概念:计算公式在信息增益基础上增加了一个惩罚项:类别本身的熵,类似于label的熵计算,其后增益率具体公式为:类别X信息增益熵/类别X自身信息熵
H = sum(-Pi
log2(Pi))/sum(-Qi*log2(Qi)),如针对class的例子,已知其信息增益熵为1,下面计算自身信息熵:(-1/4)*log2(1/4)+(-1/4)*log2(1/4)+(-1/4)*log2(1/4)+(-1/4)*log2(1/4)=2,那么class的信息增益率为:1/2=0.5;针对sex:(-1/4)log2(1/4)+(-3/4)log2(3/4)=0.811,sex信息增益率为:0.688/0.811=0.8489;同样,可以计算针对age的信息增益率:(-2/4)log2(2/4)+(-2/4)log2(2/4)=1 1/1 = 1,由信息增益率可以看出,最优选择为:class;由于该案例数据偏少,可以首先以class为点,随着数据量的增大,其自身信息熵主键偏向于1。
3. CART
CART:分类和回归树,利用gini不纯度确定不同属性的顺序,gini不纯度公式为:
1-sum(np.power(pi,2))
如上案例:针对sex计算其gini:首先sex一共两类:0/1,其中0的里面label两个为0,一个为1,那么1-((2/3)
(2/3)+(1/3)
(1/3))=4/9 对于1而言:1-(1/1)=0,从而sex的gini为:
4/9
(3/4)+0
(1/4)=1/3 针对age同样,下面附上针对某一类查看其gini的代码:

def getGini(data,column,target):
    #data:数据  column:列名 target:目标列名 data:dataframe格式
    column_value_count = data[column].value_counts()
    gini_value = 0
    for i in column_value_count.index:
        probability_i = data[target][(data[column]==i)].value_counts()/(column_value_count[i])
        gini = 1 - np.power(probability_i,2).sum()
        gini_value = gini_value + gini * (column_value_count[i]/data.shape[0])
    return gini_value

由于CART为二叉树,因此数据属性排序出第一个之后,需要进行二叉树分类,其分类方式根据目标任务分类以及回归有所不同,如果目标任务为分类,则采用gini进行二分类,选出最合适的数据分类,若果为回归:采用sum(x-x平均数)**2的形式进行分类,二者均是找出最小数值进行分类。

职业婚姻label
老师已婚1
上班已婚1
上班未婚0
学生未婚1

对上述表格数据进行二分类,已职业为案例考虑是分类任务:gini进行分析:
[(老师)(上班、学生)]、[(上班)(老师、学生)]、[(学生)(老师、上班)]这三种情况,
分别计算这三种情况下对应的label的gini数:
(1-(1/1))*1/4+(1-(2/3)**2-(1/3)**2)*3/4 = 1/3
(1-(1/2)**2-(1/2)**2)*1/2+(1-(2/2)**2)*1/2=1/4
(1-1/1)*1/4+(1-(2/3)**2-(1/3)**2)*3/4=1/3…那么根据[(上班)(老师、学生)]进行二分类,分为上班一类,老师、学生一类,然后各个类进行gini系数分类,重新计算下一层不同属性的顺序。如果针对的问题为回归问题:
例子对样本集中的所有属性a的取值(比如有3.9, 5.2, 2.3, 4.4)升序排序(2.3, 3.9, 4.4, 5.2),然后取属性a相邻两个取值的平均值(3.1, 4.15, 4.8)作为阈值进行二分类,然后计算不同阈值下的信息增益/基尼指数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值