决策树ID3

来源:互联网 发布:linux添加用户密码 编辑:程序博客网 时间:2024/06/06 02:26

ID3算法:

ID3算法是决策树的一种,它是基于奥卡姆剃刀原理的,即用尽量用较少的东西做更多的事。ID3算法,即Iterative Dichotomiser 3迭代二叉树3代,是Ross Quinlan发明的一种决策树算法,这个算法的基础就是上面提到的奥卡姆剃刀原理,越是小型的决策树越优于大的决策树,尽管如此,也不总是生成最小的树型结构,而是一个启发式算法。

在信息论中,期望信息越小,那么信息增益就越大,从而纯度就越高。ID3算法的核心思想就是在决策树的每一个非叶子结点划分之前,先计算每一个属性所带来的信息增益,选择最大信息增益的属性来划分,因为信息增益越大,区分样本的能力就越强,越具有代表性,该算法采用自顶向下的贪婪搜索遍历可能的决策空间。

决策树的一般流程:

  1. 收集数据:可以使用任何方法。
  2. 准备数据:树构造算法只适用于标称数据,因此数值型数据必须离散化。
  3. 分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。
  4. 训练算法:构造树的数据结构。
  5. 测试算法:使用经验树计算错误率。
  6. 使用算法:此步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义。
1、收集数据

在tree.py中,利用createDataSet()函数得到数据


2、计算信息熵

代码说明:

  • 首先,计算数据集中实例的总数。我们可以在需要时再计算这个值,但是由于代码中多次用到这个值,为了提高代码效率,我们显式地声明一个变量保存实例总数。
  • 然后,创建一个数据字典,它的键值是最后一列的数值。如果当前键值不存在,则扩展字典并将当前键值加入字典。每个键值都记录了当前类别出现的粗疏。
  • 最后,使用所有类标签的发生频率计算类别出现的概率。我们将用这个概率计算香农熵,统计所有类标签发生的次数。

熵越高,则混合的数据也越多,得到熵之后就可以按照获得最大信息增益的方法划分数据集。


3、划分数据集

对每一个特征划分数据集的结果计算一次信息熵,然后判断按照哪个特征划分数据集是最好的划分方法。

之后遍历整个数据集,循环计算信息熵和splitDataSet()函数,找到最好的特征划分方式。


4、递归构建决策树

构建决策树的算法流程:

  1. 得到原始数据集,
  2. 基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。
  3. 第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以再次划分数据。我们可以采用递归的原则处理数据集。
  4. 递归结束的条件是,程序遍历完所有划分数据集的属性,或者每个分支下的所有实例都具有相同的分类。

5、测试算法:使用决策树进行分类(classify()函数)


6、使用算法:决策树的存储

可以使用Python模块pickle序列化对象,参见程序中的(storeTree() andgrabTree())。序列化对象可以在磁盘上保存对象,并在需要的时候读取出来

 

应用:使用决策树预测隐形眼镜类型

决策树很好地匹配了实验数据,然而这些匹配选项可能太多了。我们将这种问题称之为过度匹配(overfitting)。为了减少过度匹配问题,我们可以裁剪决策树,去掉一些不必要的叶子结点。如果叶子结点只能增加少许信息,则可以删除该节点,将他并入到其他叶子结点中。

另一个决策树构造算法CART,本章使用的算法成为ID3,它是一个好的算法但并不完美。ID3算法无法直接处理数值型数据,尽管我们可以通过量化的方法将数值型数据转化为标称型数据,但是如果存在太多的特征划分,ID3算法仍然会面临其他问题。


在treePlotter.py中绘制分类图




资源:

对代码进行了修改,同时对代码进行注释,便于理解。

http://download.csdn.net/download/qq_34385827/9946596

祝大家顺利