码迷,mamicode.com
首页 > 其他好文 > 详细

决策树学习(ID3)

时间:2014-05-29 16:59:42      阅读:401      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

  • 参考:《机器学习实战》
  • 优点:计算复杂度不高, 输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特
  • 征数据。
  • 缺点:可能会产生过度匹配问题。
  • 适用数据类型:数值型和标称型。

  • 创建分支的伪代码(createBranch):bubuko.com,布布扣

图1

1、信息熵:

    • 图1中划分数据集的原则是:将无序的数据变得有序。在划分数据集之前之后信息发生的变化称为信息增益,划分数据集获得的信息增益最高的特征就是最好的选择。(书中对为什么用最大信息熵作为度量的原因并作解释)。
    • 信息的定义:bubuko.com,布布扣
    • 熵:            bubuko.com,布布扣
    • 在Python中对数据集的某个特征求熵比较容易:首先用字典统计该特征所有出现的值,然后可以求出对应的概率,然后由熵公式便可求出熵。

2、数据集的划分

      • 选择最好的数据集划分方式:对数据集的每个特征求信息熵,熵取最大的特征即为在按该特征划分数据时最好。

3、创建树:

    • 创建树的停止条件:子集长度达到最小值1或者只有一个特征了。在Python中可以用字典来保存树。创建过程:
    • bubuko.com,布布扣
    • 代码细节:
    • bubuko.com,布布扣
    • 所有分类得到的各个子集,按照分类时特征的值存入一个字典中,而该字典的父字典又是不同子集划分的结果。这样一层层嵌套形成一个决策字典树。在上面字典树创立过程中要注意的一点是,每多分一级字典,在数据子集中就要将上一级字典的标签删除,以免下级字典建立过程中重复划分。同时还要注意程序中:subLabels=labels[:],这一语句的作用是复制labels的剩余部分。之所以这样,是因为labels为列表,在python中列表是引用的数据类型,对其值在子函数中进行改变,则所有的labels都将会改变,而且即使用形如subLabels=labels的方式,在子函数中改变subLabels时,labels也会跟着改变。

4、绘制树图

    • 使用matplotlib提供的注解功能画树图。
    • bubuko.com,布布扣
      #-*- coding:cp936 -*-
      #===============================================================================
      # 使用文本注解绘制树节点
      #===============================================================================
      import matplotlib.pyplot as plt
      decisionNode = dict(boxstyle = sawtooth, fc = 0.8)
      leafNode = dict(boxstyle = round4, fc = 0.8)
      arrow_args = dict(arrowstyle = <-)
      
      def plotNode(nodeTxt, centerPt, parentPt, nodeType):
          createPlot.ax1.annotate(nodeTxt, xy = parentPt, xycoords = axes fraction,                            xytext = centerPt, ha = center, bbox = nodeType,                            arrowprops = arrow_args)
      def createPlot():
          fig = plt.figure(1, facecolor=white)
          fig.clf()
          createPlot.ax1 = plt.subplot(111, frameon = False)
          plotNode(a decision node, (0.5,0.1), (0.1,0.5), decisionNode)
          plotNode(a leaf node, (0.8,0.1), (0.3,0.8), leafNode)
          plt.show()
      createPlot()
      bubuko.com,布布扣

 5、使用决策树执行分类

    • 递归地比较测试数据各特征与决策树上的数值,直到进入叶子节点,最后将测试数据定义为叶子节点所属类型。

 

决策树学习(ID3),布布扣,bubuko.com

决策树学习(ID3)

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/mmhx/p/3758405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!