决策树课程设计报告

合集下载

人工智能课程设计决策树

人工智能课程设计决策树

课程设计决策树一、教学目标本课程的教学目标是让学生掌握决策树的基本概念、原理和应用方法。

通过本课程的学习,学生应能理解决策树的特点和优势,掌握决策树的构建方法和算法,并能运用决策树解决实际问题。

具体来说,知识目标包括:1.了解决策树的基本概念和原理;2.掌握决策树的分类和回归方法;3.理解决策树的优势和局限性。

技能目标包括:1.能够使用决策树算法进行数据分类和预测;2.能够运用决策树解决实际问题,如分类问题和回归问题;3.能够对决策树进行评估和优化。

情感态度价值观目标包括:1.培养对和机器学习的兴趣和好奇心;2.培养对数据的敏感性和数据分析的能力;3.培养解决问题的思维方式和团队合作的能力。

二、教学内容本课程的教学内容主要包括决策树的基本概念、原理和应用方法。

具体来说,教学大纲如下:1.决策树的基本概念:介绍决策树的概念、结构和决策过程;2.决策树的原理:讲解决策树的分类和回归方法,包括决策树的构建、剪枝和优化;3.决策树的应用:介绍决策树在实际问题中的应用,如分类问题、回归问题和异常检测等。

教材的章节安排如下:1.第四章:决策树的基本概念和原理;2.第五章:决策树的分类和回归方法;3.第六章:决策树的应用方法和实例。

三、教学方法本课程的教学方法采用讲授法、案例分析法和实验法相结合的方式。

具体来说:1.讲授法:通过讲解和演示决策树的基本概念、原理和应用方法,让学生掌握决策树的基础知识;2.案例分析法:通过分析实际案例,让学生了解决策树在实际问题中的应用和效果;3.实验法:通过实验和实践,让学生动手构建和优化决策树模型,培养解决问题的能力。

四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。

具体来说:1.教材:选用《导论》作为主教材,辅助以《机器学习》等参考书籍;2.参考书:提供相关的学术论文和案例分析,供学生深入研究和参考;3.多媒体资料:提供决策树的动画演示和实验操作视频,帮助学生更好地理解和掌握知识;4.实验设备:提供计算机和相应的软件工具,让学生进行实验和实践。

第四章:决策树学习报告

第四章:决策树学习报告

好瓜
稍蜷
根蒂=?
蜷缩 硬挺
坏瓜
色泽=?
青绿 乌黑 浅白
坏瓜
坏瓜
好瓜
好瓜
好瓜
4.3.2(1)

后剪枝决策树通常比预剪枝决策树保留了 更多的分支,一般情况下,后剪枝决策树的 欠拟合风险很小,泛化性能往往优于预剪 枝决策树.但后剪枝过程是在生成完全决 策树之后进行的,并且要自底向上地对树 中的所有非叶结点进行逐一考察.因此其 训练时间开销比未剪枝决策树和预剪枝决 策树都要大得多.
D1={1,4,6,10,13,17} p1 3 6 p2 3 6 p1 4 6 p2 2 6 D2={2,3,7,8,9,15} p1 1 5 D3={5,11,12,14,16} p2 4 5 所以 Ent ( D ) ( 3 log 3 3 log 3 ) 1.000 6 6 6 6

v
4.2(4)信息增益

属性a对样本集D进行划分所获得的“信息增益” (information gain)
V
Gain( D, a) Ent ( D)
v 1
D
v
D
Ent ( D )
v


信息增益越大,则意味着使用属性a来进行划 分所获得的“纯度提升”越大。因此,可用信 息增益来进行决策树的划分属性选择。
稍糊
清晰 模糊 稍糊
凹陷
稍凹 平坦 稍凹
硬滑
软粘 硬滑 硬滑

否 否 否
4.2(5)信息增益

以上表为例,该数据集包含17个训练样例, 用以学习一颗能预测没剖开的瓜是不是好 瓜的决策树.显然 y 2 .在决策树开始学 习时,根结点包含D中的所有样例,其中正 9 8 p 例占 p1 ,反例占 2 17 .根据(1)式可算 17 出根结点的信息熵为:

(完整版)生物数据挖掘-决策树实验报告

(完整版)生物数据挖掘-决策树实验报告

实验四决策树一、实验目的1.了解典型决策树算法2.熟悉决策树算法的思路与步骤3.掌握运用Matlab对数据集做决策树分析的方法二、实验内容1.运用Matlab对数据集做决策树分析三、实验步骤1.写出对决策树算法的理解决策树方法是数据挖掘的重要方法之一,它是利用树形结构的特性来对数据进行分类的一种方法。

决策树学习从一组无规则、无次序的事例中推理出有用的分类规则,是一种实例为基础的归纳学习算法。

决策树首先利用训练数据集合生成一个测试函数,根据不同的权值建立树的分支,即叶子结点,在每个叶子节点下又建立层次结点和分支,如此重利生成决策树,然后对决策树进行剪树处理,最后把决策树转换成规则。

决策树的最大优点是直观,以树状图的形式表现预测结果,而且这个结果可以进行解释。

决策树主要用于聚类和分类方面的应用。

决策树是一树状结构,它的每一个叶子节点对应着一个分类,非叶子节点对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划分成若干个子集。

构造决策树的核心问题是在每一步如何选择适当的属性对样本进行拆分。

对一个分类问题,从已知类标记的训练样本中学习并构造出决策树是一个自上而下分而治之的过程。

2.启动Matlab,运用Matlab对数据集进行决策树分析,写出算法名称、数据集名称、关键代码,记录实验过程,实验结果,并分析实验结果(1)算法名称: ID3算法ID3算法是最经典的决策树分类算法。

ID3算法基于信息熵来选择最佳的测试属性,它选择当前样本集中具有最大信息增益值的属性作为测试属性;样本集的划分则依据测试属性的取值进行,测试属性有多少个不同的取值就将样本集划分为多少个子样本集,同时决策树上相应于该样本集的节点长出新的叶子节点。

ID3算法根据信息论的理论,采用划分后样本集的不确定性作为衡量划分好坏的标准,用信息增益值度量不确定性:信息增益值越大,不确定性越小。

因此,ID3算法在每个非叶节点选择信息增益最大的属性作为测试属性,这样可以得到当前情况下最纯的划分,从而得到较小的决策树。

决策树分类课程设计

决策树分类课程设计

决策树分类课程设计一、教学目标本课程的教学目标是使学生掌握决策树分类的基本原理和方法,能够运用决策树进行数据的分类和分析。

具体包括以下三个方面的目标:知识目标:学生能够理解决策树的基本概念、结构以及常见的分类算法,了解决策树的优势和局限性。

技能目标:学生能够运用决策树进行数据分类和分析,能够独立设计和构建决策树模型,并对模型进行评估和优化。

情感态度价值观目标:培养学生对数据分析和决策科学的兴趣和热情,提高学生的问题解决能力和创新思维。

二、教学内容本课程的教学内容主要包括决策树的基本概念、决策树的构建方法、决策树的评估和优化等方面。

具体包括以下几个部分:1.决策树的基本概念:决策树的定义、决策树的结构、决策树的特点和应用场景。

2.决策树的构建方法:决策树的生成算法、决策树的剪枝算法、决策树的训练和预测。

3.决策树的评估和优化:决策树的评估指标、决策树的优化方法、决策树的泛化能力。

三、教学方法为了实现本课程的教学目标,将采用多种教学方法相结合的方式进行教学。

具体包括以下几种方法:1.讲授法:通过讲解决策树的基本概念、构建方法和评估优化方法,使学生掌握决策树的基本原理。

2.案例分析法:通过分析具体的决策树应用案例,使学生了解决策树在实际问题中的应用。

3.实验法:通过进行决策树的构建和评估实验,使学生掌握决策树的实际操作方法。

四、教学资源为了支持本课程的教学内容和教学方法的实施,将准备以下教学资源:1.教材:选用权威、实用的决策树教材作为主要教学资源,为学生提供系统的决策树知识。

2.多媒体资料:制作PPT、动画等多媒体资料,为学生提供直观、生动的决策树学习资源。

3.实验设备:准备计算机、数据集等实验设备,为学生提供决策树实际操作的机会。

五、教学评估本课程的评估方式将包括平时表现、作业和考试等多个方面,以全面、客观地评估学生的学习成果。

平时表现:通过观察学生在课堂上的参与度、提问和回答问题的表现,以及小组讨论和实验操作的表现,评估学生的学习态度和积极性。

决策树实验报告

决策树实验报告
4.在“解决方案资源管理器”中,右键单击“数据源”文件夹,然后选择“新建数据源”。
在“欢迎使用数据源向导”页面中,单击“下一步”按钮
在“选择如何定义连接”页上,单击“新建”向Adventure Works DW 2008 R2数据库中添加连接。(注意此步骤前必须已经启动了sql server和sql server Analysis services,并确认两者的登录身份为localSystem)
.在“挖掘模型”菜单上选择“处理挖掘结构和所有模型”。
如果更改了结构,系统将提示你们在处理模型之前生成和部署项目。单击“是”。
在“处理挖掘结构- Targeted Mailing”对话框中单击“运行”。
三个级别的决策树的预览图
四个级别的决策树的预览图:
把购买的与非购买的设置不同的背景颜色
在Number Childern At Home不等于1上看出(0表示非购买)数量是1313(1表示购买)数量是519
liaochenguniversity计算机学院实验报告20152016学年第学期一基本信息实验课程商务智能设课形式独立非独立课程学分实验项目实验三数据挖掘项目类型基础综合设计研究创新其它项目学时学生姓名2013204636系别专业信息管理与信息系统实验班组2013同组学生实验室名实验日期报告日期二实验教师对报告的最终评价及处理意见实验成绩
(2)生成Targeted Mailing结构
1.在解决方案资源管理器中,右键单击“挖掘结构”并选择“新建挖掘结构”启动数据挖掘向导。
在“欢迎使用数据挖掘向导”页上,单击“下一步”。在“选择定义方法”页上,确保已选中“从现有关系数据库或数据仓库”,
再单击“下一步”。在“创建数据挖掘结构”页的“你们要使用何种数据挖掘技术?”下,选择“Microsoft决策树”。

决策树算法实验总结

决策树算法实验总结

决策树算法实验总结
决策树算法是一种常用的机器学习算法,它通过对数据集进行递归划分,构建出一棵树状的决策模型。

在实验中,我们使用了决策树算法进行分类任务,并对实验结果进行总结。

首先,我们需要准备一个带有标签的训练数据集,其中包含了多个特征和对应的类别标签。

然后,我们可以使用决策树算法对训练数据集进行训练,构建出一棵具有判断条件的决策树。

在实验中,我们可以使用不同的指标来评估决策树算法的性能,例如准确率、精确率、召回率等。

这些指标可以帮助我们了解决策树算法在分类任务中的表现。

此外,我们还可以通过调整决策树算法的参数来提高其性能。

例如,可以通过限制树的最大深度、设置叶子节点的最小样本数等来控制决策树的复杂度,避免过拟合问题。

在实验总结中,我们可以描述决策树算法在实验中的表现,比较其与其他算法的优劣势,并提出进一步改进的方向。

此外,还可以讨论决策树算法在不同数据集上的适用性,并分析其在实际应用中可能遇到的问题和局限性。

总而言之,决策树算法是一种简单而有效的机器学习算法,可以用于分类任务。

通过实验总结,我们可以更好地理解决策树算法的原理和性能,为进一步的应用和改进提供指导。

实验报告 决策树

实验报告 决策树

4 0.01000000
3 0.03909774 0.09182077 0.03029535
Variable importance
Petal.Width Petal.Length Sepal.Length Sepal.Width
32
32
22
14
Node number 1: 114 observations, complexity param=0.75 mean=2, MSE=0.6666667 left son=2 (38 obs) right son=3 (76 obs) Primary splits: Petal.Length < 2.6 to the left, improve=0.7500000, (0 missing) Petal.Width < 0.8 to the left, improve=0.7500000, (0 missing) Sepal.Length < 5.55 to the left, improve=0.5917874, (0 missing) Sepal.Width < 3.35 to the right, improve=0.2148810, (0 missing) Surrogate splits: Petal.Width < 0.8 to the left, agree=1.000, adj=1.000, (0
1 1 1 1 1 ...
> summary(iris)
Sepal.Length
Sepal.Width
Petal.Length
Petal.Width
批注 [U1]: 清除 workplace 中所有变量 批注 [U2]: 清除内存垃圾

广工ID3决策树算法实验报告

广工ID3决策树算法实验报告

三、实验代码及数据记录1.代码#ID3算法实现代码import pandas as pdimport numpy as npimport timeimport treePlotter as treeplotterdef getData():testdata =pd.read_csv('C:/Users/asus/PycharmProjects/ID3/car_evalution-databases.csv',encoding = "utf-8")# 获取测试数据集特征feature = np.array(testdata.keys())feature = np.array(feature[1:feature.size])# 将测试数据转换成数组S = np.array(testdata)S = np.array(S[:, 1:S.shape[1]])return S,feature#统计某一特征的各个取值的概率def Probability(x):value = np.unique(np.array(x)) #统计某列特征取值类型valueCount = np.zeros(value.shape[0]).reshape(1,value.shape[0])for i in range(0, value.shape[0]):q = np.matrix(x[np.where(x[:,0] == value[i])[0]])valueCount[:,i] = q.shape[0]p = valueCount/valueCount.sum()return p#计算Entropy#S为矩阵类型#返回entropydef Entropy(S):P = Probability(S[:,S.shape[1]-1])logP = np.log(P)entropy = -np.dot(P,np.transpose(logP))[0][0]return entropy#计算EntropyA#S为数组类型#返回最小的信息熵的特征的索引值#返回最小的信息熵值def getMinEntropyA(S):entropy = np.zeros(S.shape[1]-1)for i in range(0, S.shape[1]-1):value = np.unique(np.array(S[:,i]))valueEntropy = np.zeros(value.shape[0]).reshape(1,value.shape[0]) for j in range(0,value.shape[0]):q = np.matrix(S[np.where(S[:,i] == value[j])[0]])valueEntropy[:,j] = Entropy(q)proportion = Probability(np.matrix(S[:, i]).transpose())entropy[i] = np.dot(proportion, valueEntropy.transpose())[0][0] minEntropyA = entropy.min()positionMinEntropA = entropy.transpose().argmin()return positionMinEntropA, minEntropyA#计算Gain#S为数组类型#返回最大信息增益的特征的索引值def getMaxGain(S):entropyS = Entropy(np.matrix(S))positionMinEntropyA, entropyA = getMinEntropyA(S)if(entropyS - entropyA > 0):return positionMinEntropyA#ID3算法#返回ID3决策树def id3Tree(S,features):if(Entropy(np.matrix(S)) == 0):return S[0][S.shape[1] - 1]elif features.size == 1:typeValues = np.unique(S[:, S.shape[1]-1])max = 0maxValue = S[0][S.shape[1] - 1]for value in typeValues:Stemp = np.array(S[np.where(S[:, S.shape[1]-1] == value)[0]]) if max < Stemp.shape[0]:max = Stemp.shape[0]maxValue = valuereturn maxValueelse:bestFeatureIndex = getMaxGain(S)bestFeature = features[bestFeatureIndex]bestFeatureValues = np.unique(S[:, bestFeatureIndex])# 划分S,featurefeatures = delArrary(features, bestFeatureIndex)id3tree = {bestFeature:{}}for value in bestFeatureValues:Stemp = np.array(S[np.where(S[:, bestFeatureIndex] == value)[0]]) Stemp = delArrary(Stemp, bestFeatureIndex)id3tree[bestFeature][value] = id3Tree(Stemp,features)return id3tree#删除数组中的某一列,维数小于2def delArrary(arrary,index):if(arrary.shape[0] == arrary.size):x = np.array(arrary[0:index])y = np.array(arrary[index+1:arrary.shape[0]])return np.array(np.append(x,y))else:x = np.array(arrary[:,0:index])y = np.array(arrary[:,index+1:arrary.shape[1]])return np.array(np.hstack((x,y)))def Classify(tree, feature, S):firstStr = list(tree.keys())[0]secondDict = tree[firstStr]index = list(feature).index(firstStr)for key in secondDict.keys():if S[index] == key:if type(secondDict[key]) != type(1):classlabel = Classify(secondDict[key],feature,S)else:classlabel = secondDict[key]return classlabeltic = time.process_time()S, feature = getData()S2 = np.array(S[30:S.shape[0]])S1 = np.array(S[0:29])a = np.zeros(S1.shape[0],int)b = np.array(S[0:29:,S.shape[1]-1])#生成决策树tree = id3Tree(S, feature)#print(tree)treeplotter.createPlot(tree)print('决策树生成至C:/Users/asus/PycharmProjects/ID3/决策树.png')#生成ID3决策树代码import matplotlib.pyplot as plt"""绘决策树的函数"""decisionNode = dict(boxstyle="round4", color="yellow",fc="1.0") # 定义分支点的样式leafNode = dict(boxstyle="round4", color="green",fc="1.0") # 定义叶节点的样式arrow_args = dict(arrowstyle="<-") # 定义箭头标识样式# 计算树的叶子节点数量def getNumLeafs(myTree):numLeafs = 0firstStr = list(myTree.keys())[0]secondDict = myTree[firstStr]for key in secondDict.keys():if type(secondDict[key]).__name__ == 'dict':numLeafs += getNumLeafs(secondDict[key])else:numLeafs += 1return numLeafs# 计算树的最大深度def getTreeDepth(myTree):maxDepth = 0firstStr = list(myTree.keys())[0]secondDict = myTree[firstStr]for key in secondDict.keys():if type(secondDict[key]).__name__ == 'dict':thisDepth = 1 + getTreeDepth(secondDict[key])else:thisDepth = 1if thisDepth > maxDepth:maxDepth = thisDepthreturn maxDepth# 画出节点def plotNode(nodeTxt, centerPt, parentPt, nodeType):createPlot.ax1.annotate(nodeTxt, xy=parentPt, xycoords='axes fraction', \xytext=centerPt, textcoords='axes fraction', va="center", ha="center",\bbox=nodeType, arrowprops=arrow_args)# 标箭头上的文字def plotMidText(cntrPt, parentPt, txtString):lens = len(txtString)xMid = (parentPt[0] + cntrPt[0]) / 2.0yMid = (parentPt[1] + cntrPt[1]) / 2.0createPlot.ax1.text(xMid, yMid, txtString)def plotTree(myTree, parentPt, nodeTxt):numLeafs = getNumLeafs(myTree)depth = getTreeDepth(myTree)firstStr = list(myTree.keys())[0]cntrPt = (plotTree.x0ff + \(1.0 + float(numLeafs)) / 2.0 / plotTree.totalW, plotTree.y0ff) plotMidText(cntrPt, parentPt, nodeTxt)plotNode(firstStr, cntrPt, parentPt, decisionNode)secondDict = myTree[firstStr]plotTree.y0ff = plotTree.y0ff - 1.0 / plotTree.totalDfor key in secondDict.keys():if type(secondDict[key]).__name__ == 'dict':plotTree(secondDict[key], cntrPt, str(key))else:plotTree.x0ff = plotTree.x0ff + 1.0 / plotTree.totalWplotNode(secondDict[key], \(plotTree.x0ff, plotTree.y0ff), cntrPt, leafNode)plotMidText((plotTree.x0ff, plotTree.y0ff) \, cntrPt, str(key))plotTree.y0ff = plotTree.y0ff + 1.0 / plotTree.totalDdef createPlot(inTree):fig = plt.figure(figsize=(300,15))fig.clf()axprops = dict(xticks=[], yticks=[])createPlot.ax1 = plt.subplot(111, frameon=False, **axprops)plotTree.totalW = float(getNumLeafs(inTree))plotTree.totalD = float(getTreeDepth(inTree))plotTree.x0ff = -0.5 / plotTree.totalWplotTree.y0ff = 1.0plotTree(inTree, (0.5, 1.0), '')plt.savefig(""C:/Users/asus/PycharmProjects/ID3/决策树.png") #plt.show()2.结果截图决策树截图:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告设计题目:决策树构造算法的实现学生姓名:班级:学号:完成日期:(一) 需求和规格说明(1) 决策树是通过一系列规则对数据进行分类的过程。

它提供一种在什么条件下会得到什么值的类似规则的方法。

它是一个从上到下、分而治之的归纳过程,是决策树的一个经典的构造算法。

应用于很多预测的领域,如通过对信用卡客户数据构建分类模型,可预测下一个客户他是否属于优质客户。

(2) 分类是数据挖掘、机器学习和模式识别中一个重要的研究领域。

数据分类是一个两步过程。

第一步,使用已知类别标记的训练数据集建立一个分类模型。

例如:图1是一个决策树模型。

第二步,对未知标记的数据使用模型进行分类。

例如,根据图1的决策树模型,运用自顶而下的属性测试过程,将表2中的样例1-6分别分类为“Y ”、“Y ”、“Y ”、“Y ”、“N ”、“N ”。

图1. 一个决策树模型的例子 (3) 举例:对下表运用算法构建决策树表1. 一个训练数据集编号 天况 温度 湿度 风况 分类 1 晴 热 大 无 N 2 晴 热 大 有 N 3 多云 热 大 无 Y 4 雨 中 大 无 Y 5 雨 冷 正常 无 Y 6 雨 冷 正常 有 N 7 多云 冷 正常 有 Y 8 晴 中 大 无 N 9 晴 冷 正常 无 Y 10 雨 中 正常 无 Y 11 晴 中 正常 有 Y 12 多云 中 大 有 Y 13 多云 热 正常 无 Y 14雨中大有N对下列样例输入使用构建的决策树模型预测其分类属性:表2. 一个待分类的数据集编号 天况 温度 湿度 风况 分类 1 晴 热 正常 无 ? 2晴热正常有?天况湿度风况晴多云雨大有无YYNNY正常(二)设计基本算法描述:输入:训练样例集S,未标记的节点T,属性集A输出:以T为根的决策树①如果S中所有样例都是正例,则标记节点T为“Y”,并结束;②如果S中所有样例都是反例,则标记节点T为“N”,并结束;③否则,从A中选择一个属性X,(可随机选)标记节点T为X;④设X的所有取值为V1, V2,…,V n,依据这些取值将S划分为n个子集S1, S2, …, S n,建T的n个孩子节点T i,并分别以V i作为从T到T i的分支标号;⑤对每对(S i,T i,A-{X}),递归调用ID3算法建立一棵以T i为根的子树;决策树算法是非常常用的分类算法,是逼近离散目标函数的方法,学习得到的函数以决策树的形式表示。

其基本思路是不断选取产生信息增益最大的属性来划分样例集和,构造决策树。

信息增益定义为结点与其子结点的信息熵之差。

信息熵是香农提出的,用于描述信息不纯度(不稳定性),其计算公式是Pi为子集合中不同性(而二元分类即正样例和负样例)的样例的比例。

这样信息收益可以定义为样本按照某属性划分时造成熵减少的期望,可以区分训练样本中正负样本的能力,其计算公式是根据此基本算法,设计一个链表结构体LNode,并用link作为指针,定义LL为训练样式集;设计另一个链表AttrNode,用Attributes作为指针,定义attr_L为属性集;设计一个树结构Tnode,存储形式为孩子-兄弟结点。

另外,定义Attributes_kind存储属性名称,定义Attr_kind存储属性值的个数,OutLook_kind;Temperature_kind;Humidity_kind;Wind_kind存储各属性对应的值。

训练样式集最初存储在” data\\examples.xls”中,决策树以广义表的形式输出到文件"data\\result.dat",未知类别属性数据样例存放在”data/undec.xls”。

系统结构图(三)用户手册给定训练数据集,本程序将构建决策树模型,并实现对未知类别属性数据样例的分类。

程序运行前,请先将训练数据集存放在<data/examples.xls>,请确保数据与天况、温度、湿度、风况、分类一一对应。

例如:分类结果将显示在屏幕中。

决策树模型将以广义表的形式显示在<data/result.dat>中。

(四)调试及测试运行实例:输入文件同(三)用户手册,输出文件"data\\result.dat"为:界面设计:因可能不使用未知类别属性数据样例文件,故需提供一个界面供用户自由选择。

不足与改进:因需对属性名、属性值进行匹配,对于每一个不同的属性,需使用不同的代码,故本程序比较繁琐,在后期增加了一些函数精简了代码。

(五)附录——源程序#include <iostream>#include <fstream>#include <math.h>#include <cstring>#include <stdlib.h>#include<iomanip>using namespace std;#define ROW 20#define COL 5#define log2 0.69314718055typedef struct TNode //决策树{string data;string weight;TNode *firstchild,*nextsibling;}*tree;typedef struct LNode{string OutLook;string Temperature;string Humidity;string Wind;string PlayTennis;LNode *next;}*link;typedef struct AttrNode{string attributes;//各个属性名称int attr_Num;//属性对应的值的个数AttrNode *next;}*Attributes;string Attributes_kind[4] = {"OutLook","Temperature","Humidity","Wind"};//属性名称int Attr_kind[4] = {3,3,2,2}; //属性对应的值的个数string OutLook_kind[3] = {"Sunny","OverCast","Rain"}; //各个属性的值string Temperature_kind[3] = {"Hot","Mild","Cool"};string Humidity_kind[2] = {"High","Normal"};string Wind_kind[2] = {"Weak","Strong"};string undec[4];ifstream fin("data\\examples.xls");ofstream fout("data\\result.dat");ifstream fin2("data\\undec.xls");link LL;Attributes attr_L;tree T;void treelists(tree T);void InitAttr();void InitLink();void ID3(tree &T,link L,link T arget_Attr,Attributes attr);void PN_Num(link L,int &positve,int &negative);double Gain(int positive,int negative,string atrribute,link L,Attributes attr_L);void copy1(link q, link link_child);void input();void decision(tree T);int main1();int main2();int main(){int choice;bool get_1=false;while(1){cout<<" ======决策树构造算法的实现======"<<endl;cout<<"│1、训练并构建决策树模型"<<setw(9)<<"│"<<endl;cout<<"│2、对未知类别属性数据样例分类"<<setw(3)<<"│"<<endl;cout<<"│3、帮助"<<setw(25)<<"│"<<endl;cout<<"│4、退出"<<setw(25)<<"│"<<endl;cin>>choice;switch (choice){case 1:get_1=true;system("cls");main1();system("C:\\windows\\notepad.exe data\\result.dat");system("pause");system("cls");break;case 2:system("cls");if(!get_1)cout<<"Please choose 1 first."<<endl;else main2();system("pause");system("cls");break;case 3:system("cls");cout<<endl<<"\a 给定训练数据集,本程序将构建决策树模型,并实现对未知类别属性数据样例的分类。

"<<endl;cout<<" 训练数据集请存放在<data/examples.xls>,未知类别属性数据样例请存放在<data/undec.xls>,决策树模型显示在<data/result.dat>。

相关文档
最新文档