更全的杂志信息网

决策树ID3算法中引入简单工厂模式的设计研究

更新时间:2016-07-05

1 引言

根据决策科学化、民主化,完善决策信息与智力支持系统的要求,在数据分析之初建立决策树模型,采用经典的决策树算法对树节点进行判断决定流程方向.树中的每个节点代表某个对象,每个分叉路径则表示可能的属性值,每个叶结点则对应从根节点到该叶节点所经历的路径[1].从某种意义上来说路径的选择即是决策过程,在判断哪个属性值是最佳的分类属性则是决策树算法的核心问题,这里涉及到一个比较重要的概念即期望信息(熵).

传统根据分类的类别变量先计算出期望信息(熵),再计算出每个特征变量的期望信息(熵),选择产生最大信息增益的变量N,在当前结点选择变量N的取值进行分解,递归执行即可生成决策树[2].创建决策树前会把训练集合中的特征变量固化在程序内容里,把特征变量期望值计算过程封装在一个方法中,通过分别计算特征变量的期望值(熵),选择最大信息增益的变量N.算法中特征变量及类别变量受使用场景的限制,事先已经固化在程序中,而在进行决策分析时,受客观条件限制,两种变量往往需要临时新增或删除,因此给决策树ID3算法的维护带来很大的不便.

按照简单工厂模式的思想,样本训练集中特征变量为具体产品A即特征变量对象,通过特征变量对象定义的方法得出特征变量期望值(熵).而训练集合中的类别变量为具体产品B即类别变量对象,通过类别变量对象定义的方法得出类别变量期望值(熵),利用简单工厂中静态方法,由客户端带入相应的参数生成对应的特征变量对象与类别变量对象.较之以往把特征及类别变量期望值的计算固化在程序内容里,这种松耦合性的设计提高了ID3算法的灵活性,同时也增强的代码的可读性和维护性.特征变量及类别变量的灵活增减也提高了该算法的在不同应用项目中的移植性.

2 相关知识理论

2.1 简单工厂模式

简单工厂模式又称为静态工厂模式(Static Factory Method),按照设计模式理论中关于简单工厂模式的定义即一个工厂对象决定创建出哪一种产品类的实例,在工厂类中定义静态方法,根据静态方法的入参判断具体生成那一种具体产品类[3].在此模式中定义3个角色,即抽象产品类、具体产品类、工厂(见图1).

图1 简单工厂角色关系图

简单工厂模式的目的就是根据工厂中定义的静态方法由客户端的入参创建出具体产品,在实际应用中工厂角色被定义成包含静态方法(Static Method)的具体类,抽象产品类通常作为框架中对外提供的一种数据类型,把不同具体产品的公共属性提取出来作为抽象产品类的成员属性或变量.而每种不同产品的实现内容不同,因此可由抽象产品派生出其子类即具体产品,具体产品类中定义了体现该产品特有的信息成员,包括成员属性及方法[4].

2.2 数据挖掘ID3算法

决策树在现实应用中是一种依赖于决策而建立起来的一种树型结构节点集合.在机器学习中,决策树作为一种预测模型,代表的是对象属性与对象值之间的一种映射关系,每一个节点代表某一个对象,树中的每一个分叉代表某个可能的属性值,每一个叶子节点则对应从根节点到该叶子节点所经历的路径,表示的对象的值,通常要求决策树仅有单一输出.ID3算法是几种实现决策树模型的一种,它是基于奥卡姆剃刀原理的,即尽量用较少的东西做更多的事[5].该算法的核心思想就是以信息增益来度量属性的选择,选择信息增益最大的属性进行分裂,该算法采用自顶向下的贪婪搜索来遍历可能的决策空间.

信息增益则定义为结点与其子结点的信息熵之差.信息熵是香农提出的,用于描述信息不纯度(不稳定性),其计算公式是

Pi为子集合中互异(二元分类即正样例和负样例)的样例的比例.信息收益可以定义为样本按照某属性划分时造成熵减少的期望,由此可以区分训练样本中正负样本的能力.关于熵的计算过程也就是针对样例集合进行正反例进行对数计算的过程,熵介于0,1之间.这里假设S是一个具有布尔值的有16个样例的集合,它包括10个正例和6个反例(采用记号[9+,5-]来概括这样的数据样例).即Entropy([10+,6-])=-(10/16)log2(10/16)-(6/16)log2(6/16)=0.95.集合中特征变量包含a1,a2,a3,….若干个,针对每一个特征变量计算出期望值k1,k2,k3,….如果按照若干特征变量进行划分,则获得的信息增益为:0.95-k1,0.95-k2,0.95-k3,….由此获得能够带来最大信息增益的变量,在当前结点选择以该变量的取值进行分裂,递归地进行执行即可生成决策树.

试验对胶凝材料进行亚甲蓝试验和过筛后的显微镜试验,后形成和整理出了相应的合理性能区间和形貌特征,以提供检测数据的性能判定参考。

3 模式设计实现

3.1 样例集合信息采集

开发环境采用VS2010,编程语言C#[6].在Winform窗体设计阶段完成相关样例集合的信息采集,采用二维字符串类型的数组保存样例集合,同时分解出特征变量一维数组集合.

下面以顾客购买数据信息采集为例(见图2).

图2 样例信息采集界面

CategoryLabels = categoryLabels;//根据类别变量行为获得类别行为值,yes为1,no为0.

int col = dataGridView1.Rows[1].Cells.Count;//得到总列数

string[][] exams=new string[row][];//用于保存样例集合信息的二维字符串数组

以下采用双重循环获取窗体列表中的单元内容,并把内容保存在exams样例集合中 .

for (int i = 0; i < row; i++)

{

for (int j = 0; j < col; j++)

技巧是基本体操类主要内容之一,它是发展学生在支撑、滚动、平衡等动作水平和身体柔韧、协调、平衡、速度等素质和为今后学习体操类运动奠定基础的重要内容,也具有自我保护和实用价值。利用韵律和舞蹈培养学生审美情趣不难理解,利用技巧的学习如何做到这一点嫩?我在教学中,利用多媒体向学生展示奥运会运动员完美的表演,同时向学生介绍体操评分方法,既让学生学习了体操的知识,有培养学生的审美情趣和体操意识。

基于Markov模型对我国晚期胰腺癌3种化疗方案的药物经济学研究 ……………………………………… 汤少梁等(6):784

}

以下声明一维数组用来保存样例中特征变量集合以及类别变量.

string[] names = new string[col];

for (int j = 0; j < col; j++)

names[j] = dataGridView1.Columns[j].HeaderText;

exams[i][j] =dataGridView1.Rows[i].Cells[j].Value.ToString();

把样例集合exams与特征类别变量集合names带入DecisionTreeID3泛型类的构造函数中生成带有根节点的空决策树,DecisionTreeID3构造函数如下

public DecisionTreeID3(T[,] exams, string[] names, T[] categoryLabels)

{

Data =exams;Names = names;//公共变量赋值.

Category =exams.GetLength(1) - 1;//集合最后一列为类别变量

int row = dataGridView1.Rows.Count;//得到总行数

}

3.2 简单工厂模式类结构分析

按照简单工厂模式中三个角色的业务功能,本框架的类结构图如下.

建筑立面设计的飘窗是指嵌入墙体,一般呈矩形形状或梯形形状向室外空间的部分凸起,具体可单独设计一面也可连续设计三面均为玻璃窗的窗体。普通窗台和飘窗相比具有以下尺寸差异:普通窗台一般高度不低于900mm,飘窗台面距地400mm且飘窗窗台伸出600-800mm[1]。

1)抽象产品类(AbstractEntropy).即抽象熵类,在抽象熵类中定义信息熵实现的公共方法和虚方法.在公共方法中定义了各具体子类均可调用的公共方法,用来获取集合中的熵值,虚方法则根据具体产品子类的不同需要被继承覆写的方法.代码说明如下:

abstract class AbstractEntropy

publicConcreteCharact () { }//具体产品构造函数

public double GetEntropy(int[] count)

{

油茶苗木培养中,播种育苗是其中一种育苗方式。在播种育苗中,要选择地势平坦和避风向阳以及排水良好的微酸性土壤。在播种之前做好苗床,并且在苗床中使用基肥,在播种完成之后需要在覆盖一层肥土和薄草,从而更好的提升种子发芽率。

double Entropy = 0.0;

for (int i = 0; i < count.Length; i++)//遍历仅包含0或1的行为值.

{

double frequency = count[i] / (double)tuple.Item2;

double t = -frequency * Log2(frequency);//根据熵值的计算公式获得

Entropy += t;

本文提出,在进行直流潮流的控制器的设计时,可以设计为3种形式,分别是可变串联电阻器、直流变压器以及串联电压源。为了更加灵活地分配和调度直流电网线之间的直流潮流,从自由度的层面优化直流潮流的控制效果,首先需要分析的是影响直流潮流分布的关键因素,根据理论方法设计出一种基于双有源桥拓扑的线间直流潮流控制器。

}

return Entropy;//返回熵值

}

//由子类实现变量的期望值,即特征变量期望值和类别变量期望值.

2.1 研究对象 本研究针对大中小(幼)一体化体育课程体系建设的国际化问题进行研究,比较分析了美国等几个国家体育课程体系建设与实施经验,探寻我国建设朝向国家化发展方向的一体化体育课程体系的重要思路与方法。

public virtual double GetDesiredValue(int[] pnRows);

}

2.2.2 概率性敏感性分析 根据前文的假设,成本服从正态分布,转移概率服从β分布。成本数据的状态分布参考相关文献[17-18,24,27]报道的参数的 95%CI值,计算其标准差;转移概率的状态分布则根据其均值和标准差计算其α、β值。采用TreeAge Pro 2011软件对模型结果进行概率性敏感性分析,对模型进行次数为1 000的蒙特卡洛模拟,相关参数见表8。对模拟结果绘制成本-效用可接受曲线,详见图3。

2)具体产品类(ConcreteCharact,ConcreteCateg).定义两个具体子类,即特征变量类和类别变量类,分别继承抽象产品类,重写父类中的虚方法,方法具体实现了特征变量期望值与类别变量期望值计算过程,并返回相关的信息.特征变量子类主要代码如下

class ConcreteCharact: AbstractEntropy

It was shown that hyperphosphatemia is an independent factor determining the unfavorable prognosis,accelerating the progression of IHD,aggravating systolic hypertension and LVH,increasing the risk of arrhythmia,as well as acute and congestive HF in patients on LTH[56].

{ //具体子类中定义的一些方法或者成员变量.

public override double GetDesiredValue (int[] pnRows)//实现重写抽象产品类中的虚方法

{

//通过AttributeCount方法转换成实现了IEnumerable接口的泛型类.

var tuples = AttributeCount(attrCol, pnRows);

//遍历泛型集合tuples,调用父类中的GetEntropy方法获取每个特征变量的期望值.

Return GetEntropy(pnRows);

}

{

}

3)工厂类(EntropyFactor).此类中定义一个静态方法,由客户端调用此方法,通过方法的入参决定实现具体的产品(特征变量对象和类别变量对象).

public class EntropyFactor

{

档案管理办法改革需要一段时间,首先需做好前期的收集和整理工作。单位领导必须要作出严格的档案审批制度,做好分层、分批次审批。坚决制止人事工作人员懈怠工作。收集工作必须具体到个人、各片区,收集的材料及时整理分析,尽快交给上级领导部门审批,工作人员不能越级上报。整理数据时必须对档案全面普查,对于未编写标题、页码、类别号、案卷号或者标题不明的档案,进行重新的整理,必须在短时间内把内容补充完整。

AbstractEntropy abstractEntropy=null;//定义的提供给客户端的抽象产品变量.

{

public Static AbstractEntropy StaticFactoryMethod(string productType)

临床药师询问患者病情、合并用药及日常饮食等具体情况,经过比较分析可能影响该患者华法林INR值的因素,包括病理生理方面、合并用药方面及饮食方面。

switch (productType)//以下根据入参productType判断生成对象

{

case "Charact"://特征变量对象生成

abstractEntropy = new ConcreteCharact ();

3)课题研究以课程组的团队形式打造,拟形成一支知识结构合理、专业优势互补、理论素养与实践能力俱佳的师资队伍。

二次衬砌技术的工作内容主要是对隧道施工过程中的初期支护采用钢筋混凝土衬砌或模筑混凝土进行衬砌,进而使隧道的初期支护与二次衬砌形成复合衬砌结构,以此对隧道开挖断面进行加固和优化。另外,二次衬砌主要针对的是隧道拱墙以及仰拱位置。因此,对仰拱进行二次衬砌前,要做好仰拱位置的杂物处理,确保仰拱隧道位置的清洁,并在超挖部分进行同级混凝土回填,施工人员应衬砌一次成型,同时保证填充混凝土的强度达到施工工程要求,确保施工质量[5]。

break;

case "Categ"://类别变量对象生成

abstractEntropy = new ConcreteCateg();

break;

}

}

3.3 工厂客户端应用

创建简单工厂实例EntropyFactor entropyFactor=new EntropyFactor();

通过以下工厂方法带入参数生成具体对象,即特征变量对象与类别变量对象.

AbstractEntropy ConcreteCharact= entropyFactor. StaticFactoryMethod(“Charact”);

AbstractEntropy ConcreteCateg = entropyFactor. StaticFactoryMethod(“Categ”);

根据ID3算法过程中产生由样本集合生成的含有0和1值的行集合pnRows,把pnRows作为特征变量对象方法GetDesiredValue入参带入,计算得出期望值desiredValue.

Double desiredValue= ConcreteCharact. GetDesiredValue(pnRows);同理得出类别变量对象的期望值.

4 总结

在经典决策树ID3算法中,通过样本训练集合反复循环的遍历每个节点属性,找出特征变量期望值与类别变量期望值相差最大的节点,即信息增益最大的节点并以此节点进行分裂,递归实现决策树结构. 样本集合中特征变量与类别变量期望值的计算是整个ID3算法中核心模块,采用软件设计模式中的简单工厂模式框架结构,把两种变量期望值的计算过程从传统的ID3算法中分离出来,在工厂方法中封装了期望值实现的过程并返回值,提供给ID3算法,从而增强了代码可读性与维护性,符合软件工程的思想.

参考文献:

[1] 王熙照,翟俊海.基于不确定性的决策树递归[M].北京:科学出版社,2012.

[2] 甄镭.Net与设计模式[M].北京:电子工业出版社,2005.

[3] 李瑞,许旭睿.决策树ID3算法的分析与优化[J].大连交通大学学报,2015(4):91-92.

[4] 伽玛等,著.设计模式:可复用面向对象软件的基础[M].李建军等,译.北京:机械工业出版社2009.

[5] 陈安,陈宁.数据挖掘技术及应用[M].北京:科学出版社,2006:116-118.

[6] IanGriffiths.Programming C# 5.0[M].O'Reilly Media,Inc,USA.,2012:256-259.

[7] Christian nagel,jay glynn,MorganSkinner.C#高级编程(第九版)[M].北京:清华大学出版社,2014:166-209.

孙道远
《德州学院学报》 2018年第02期
《德州学院学报》2018年第02期文献

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号