from https://www.jianshu.com/p/25c8bbd1bfa0
1、计算信息熵
首先我们知道信息熵公式为:
假设在没给任何天气信息的情况下,根据历史数据,得到今天打球的概率为9/14,不打概率为5/14,根据信息熵公式计算得到
python实现
2、计算条件熵和信息增益
假定我们根据天气来决定是否打球,四大特征依次为:天气,温度,湿度,风度,如下图所示
首先计算特征为”天气”下的条件熵和信息增益,由上图知道
(1)天晴时:
打球概率0.4,不打概率0.6(可能温度特别高,没法打)
计算信息熵为:0.971
(2)阴天时:
打球概率1.0 (天气凉爽打球爽歪歪)
计算信息熵为:0 (100%打球无悬念,毫无信息量)
(3)下雨:
打球概率0.6,不打概率0.4(下雨反而更挡不住一颗打球的心,哈哈)
计算信息熵为:0.971
2.1、计算条件熵:
条件熵公式如下:
根据历史统计数据,outlook取值为天晴、阴天、下雨的概率分别是5/14、4/14、5/14,由上面知道对应的信息熵分别0.971,0,0.971,,因此条件熵为(这里X=x为特征值outlook):0.693
2.2、计算信息增益
信息增益 = 信息熵 - 条件熵
由上面知道了信息熵为0.940和特征为天气下的条件熵为0.693,计算得到
gain(outlook) = 0.940-0.693 = 0.247。
同样可以计算出gain(temperture)=0.029,gain(humidity)=0.152,gain(windy)=0.048。
我们发现gain(outlook)最大(即outlook在第一步使系统的信息熵下降的最快),所以决策树的根节点就去outlook。其余子节点的求法和根节点类似,所以决策树算法是一个递归算法。
3、关于python中log函数
(1)math中不止有math.Log(m,n)用法
(2)math库中还有如下用法,没有底数默认为e
(3)numpy用法,没有底数默认为e