决策树构造完成后,对决策树进行修剪。
分布式ID3算法实现
本课题是基于Hadoop的分布式算法研究,使用MapReduce来进行分布式算法的构
建。前文已经对MapReduce原理进行简单介绍,在Hadoop框架下Map相当于是分解任务的过程,Reduce就相当于是结果汇总过程,将MapReduce并发过程划分成以下三个主要步骤:
对原始数据进行分割,将数据分成若干个结点数据,并预处理成(key,value)的键值对发送到HDFS的各结点,作为Map()函数的输入。
读取(key,value)键值对,执行Map()函数,解析value的数据结构,实现相应的分布式算法和数据异常处理,并以相同的(key,value)键值对输出,用来作Reduce()的输入。
先将Map()的输出传输到集群的主节点,将数据按照key值进行合并,进行Reduce()操作,并得到结果,将结果传输到HDFS中。
通过ID3的执行步骤与MapReduce步骤相结合,将ID3数据挖掘算法并行化,ID3
算法中步骤2所耗费的资源是最大的,并且计算各属性的信息增益值是可以进行并行化处理,因此课题将ID3中的步骤2并行化,使用Map函数进行计算各个属性的信息增益值,再将步骤3定义成Reduce过程,选择海量数据中具有最大增益值的属性来构造成节点,在决策树构造完成之前需要不断的执行MapReduce过程,直到ID3将决策树构造完成。本课题使用这种方法完成分布式ID3算法。
其他分布式ID3算法实现
对ID3并行化的研究在业界上还有其他的研究成果,除了以上将熵计算步骤并行化之外,还有重新构造数据结构,建立新的数据结构属性按类别分布表,表中存储了结点数据集中属性分布在各类别上的计数。而计算属性的信息增益大小需要的数据基础全部包含于此属性按类别分布表中。此分布式算法流程如下:
图4-3 ID3属性按类别分布表的分布式算法流程
开发的关键技术
Python后台原理
Python是一门面向对象的语言,可以使用面向对象的所有特性,Python每个对象都有自己的命名空间,如类的实体对象,它所有的属性和方法构成的字典其实就是它的命名空间,当访问一个对象的属性或者方法的时候,实际上就是再对象的命名空间查找名称对应的对象。一般来说有三个命名空间:local、global、built-in。这三个空间会随着代码运行而动态生成、更新、切换,一个栈帧用友独立的三个名字空间。类似于C语言的运行时栈,函数调用时保存当前栈帧,生成一个新的栈帧,填充函数执行所需要的各种信息,运行函数代码后销毁栈帧,然后出栈,继续执行之前的代码。
WxPython图形界面
使用sizer进行布局
Sizer是一种算法,并不是窗口部件或者容器。使用sizer对象唯一目的就是更好的管理容器中窗口部件的布局。
由Gridsizer的构造函数gridsizer(rows,cols,vgap,hgap)可以发现sizer的实际值是由孩子的数量所决定的,利用此动态布局的特性,能让让图形界面更加满足用户需要。当一个新的窗口部件被添加到sizer时,它就会使用这个部件的初始尺寸或根据布局计算出恰当的尺寸,再进行布局。
Boxsizer对象可以对一个垂直列或者水平行进行简单灵活的布局,可以让窗口部件在其中从左至右或从上到下布置在一条线上,本课题中常使用sizer之间的嵌套,更直观的开发出展示数据的界面。
本课题使用sizer管理程序的布局问题,不需要手动去指定每个元素在布局中的位置和尺寸,可以将元素添加到sizer中,然后用sizer负责将每个元素展示到屏幕上,当用户调整框架的尺寸时,sizer的管理布局是非常好的,常用代码如下: Python基于hadoop的大规模并行数据分析系统原型设计(10):http://www.751com.cn/jisuanji/lunwen_2653.html