参考Python数据分析与挖掘实战
1 ID3算法的基本原理
ID3算法基于信息熵来选择最佳的测试属性。他选择当前样本集中具有最大信息增益值的属性做为测试属性,用信息增益值度量不确定性:信息增益越大不确定性越小。因此ID3算法在每个非叶子节点选择信息增益最大的属性最为测试属性,这样可以得到当前情况下最纯的分析,从而得到较小的决策树。
显然E(A)越小,Gain(A)的值越大,说明选择测试属性A对于分类提供的信息越大,选择A之后对于分类的不确定程度越小
2 ID3算法的计算流程
假设有以下数据,共34条记录
2.1 计算总体信息熵
数据中共34条记录,销量为高的有18条,销量为低的有16条
2.2计算各属性的信息熵
是否周末:是周末销量高的有11条,低的有3条,可表示为H(11,3),否周末销量高的有7条,销量低的有13条表示为H(7,13)。则是否周末的信息熵计算公式如下
是否有促销:有促销销量高的有15条记录,销量低的有7条记录,可表示为H(15,7),无促销销量高的有3条记录,销量低的有9条记录,可表示为H(3,9),则是否有促销属性的信息熵计算如下:
2.3 计算各商品的信息增益
由以上结果可得是否周末的信息增益最大,最为根节点,如此循环往复直到没有新的节点分支
2.4 生成决策树
从上图就可以看出销售高低和各个属性之间的关系
2.5 ID3算法的缺点
由于ID3算法采用了信息增益做为选择测试属性的标准,会偏向于选择取值较多的,即所谓的高分支属性,而这一类属性并不一定是最优的属性,同时ID3算法只能处理离散值,对于连续的属性在分类之前需要进行离散化,为了解决倾向于选择高度分之的问题人们采用了信息增益率做为测试属性的标准,这种算法就是改进的C4.5算法。
3 ID3算法的Python实现
参考机器学习实战