决策树中熵和信息增益的计算,构造决策树 ID3

信息熵很亮的是在你知道一个事件的结果后,平均会带给你多大的信息量,当事件的不确定性越大,那么要搞清它所需要的信息量也就越大,也就是信息熵越大,是无序性,不确定性的度量指标。

信息熵的计算:

-p[i]logp[i],底数为2

public static double calcEntropy(int p[]) {
		double entropy = 0;
		// 用来计算总的样本数量,p[i]/sum即i的概率
		double sum = 0;
		int len = p.length;
		for (int i = 0; i < len; i++) {
			sum += p[i];
		}
		for (int i = 0; i < len; i++) {
			entropy -= p[i] / sum * log2(p[i] / sum);
		}
		return entropy;
	}
给定一个样本数组,先一轮循环计算出样本总量,后面即可得出每个样本的概率,就可以套用公式计算了

信息增益就是信息熵的变化值,信息熵下降最快的节点就可以作为决策树的根节点,缩短树的高度

一个属性A相对样本集S的信息增益为:

gain(S,A) = H(S) - A属性为已知值的加权信息熵

outlook temperature humidity windy play
sunny hot high FALSE no
sunny hot high TRUE no
overcast hot high FALSE yes
rainy mild high FALSE yes
rainy cool normal FALSE yes
rainy cool normal TRUE no
overcast cool normal TRUE yes
sunny mild high FALSE no
sunny cool normal FALSE yes
rainy mild normal FALSE yes
sunny mild normal TRUE yes
overcast mild high TRUE yes
overcast hot normal FALSE yes
rainy mild high TRUE no
如上图数据所示,根据该数据,构造出一颗决策树,将来可以根据不同的天气情况决定是否出去玩play

先计算在不知任何天气情况下的信息熵,直接看play列,yes的有9个,no的有5,所以套用公式计算信息熵

H = -9/14*log(9/14)-5/14*log(5/14) = 0.940

然后依次计算每个属性的信息熵,先看outlook属性,当outlook为已知值的时候,计算该信息熵

1、当outlook=sunny时,看play列,yes的有2个,no的有3个,计算信息熵为

H = -2/5*log(2/5)-3/5*log(3/5) = 0.971

2、当outlook=overcast时,看play列,yes的有4,no的有0,计算信息熵

H = 0

3、当outlook=rainy时,看play列,yes的有3个,no的有2个,计算信息熵

H = 0.971

再看当outlook为sunny,overcast,rainy时的概率分别为5/14,4/14,5/14

所以当outlook为已知值的时候,信息熵为5/14*0.971+4/14*0+5/14*0.971 = 0.693

所以得出outlook属性的信息增益gain=0.940-0.693 = 0.247


同理我们再计算temperature,humidity,windy的信息增益分别为0.029,0.152,0.048

由此得知,信息增益最大的属性为outlook,所以选择该节点为决策树的根节点

outlook temperature humidity windy play
  yes no   yes no   yes no   yes no yes no
sunny 2 3 hot 2 2 high 3 4 FALSE 6 2 9 5
overcast 4 0 mild 4 2 normal 6 1 TRUR 3 3    
rainy 3 2 cool 3 1                

分支Overcast的所有样例都是正例,所以成为目标分类为Yes的叶结点。














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值