首页 > 代码库 > 机器学习【2】决策树中熵和信息增益的计算,构造决策树 ID3

机器学习【2】决策树中熵和信息增益的计算,构造决策树 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属性为已知值的加权信息熵

outlooktemperaturehumiditywindyplay
sunnyhothighFALSEno
sunnyhothighTRUEno
overcasthothighFALSEyes
rainymildhighFALSEyes
rainycoolnormalFALSEyes
rainycoolnormalTRUEno
overcastcoolnormalTRUEyes
sunnymildhighFALSEno
sunnycoolnormalFALSEyes
rainymildnormalFALSEyes
sunnymildnormalTRUEyes
overcastmildhighTRUEyes
overcasthotnormalFALSEyes
rainymildhighTRUEno
如上图数据所示,根据该数据,构造出一颗决策树,将来可以根据不同的天气情况决定是否出去玩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,所以选择该节点为决策树的根节点

outlooktemperaturehumiditywindyplay
 yesno yesno yesno yesnoyesno
sunny23hot22high34FALSE6295
overcast40mild42normal61TRUR33  
rainy32cool31        

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














机器学习【2】决策树中熵和信息增益的计算,构造决策树 ID3