当前位置:文档之家› 实验三决策树算法实验实验报告

实验三决策树算法实验实验报告

实验三决策树算法实验实验报告
实验三决策树算法实验实验报告

实验三决策树算法实验

一、实验目的:熟悉和掌握决策树的分类原理、实质和过程;掌握典型的学习算法和实现技术。

二、实验原理: 决策树学习和分类.

三、实验条件:

四、实验容:

1 根据现实生活中的原型自己创建一个简单的决策树。

2 要求用这个决策树能解决实际分类决策问题。

五、实验步骤:

1、验证性实验:

(1)算法伪代码

算法Decision_Tree(data,AttributeName) 输入由离散值属性描述的训练样本集data; 候选属性集合AttributeName。

输出一棵决策树。(1)创建节点N;

(2)If samples 都在同一类C中then (3)返回N作为叶节点,以类C标记;(4)If attribute_list为空then

(5)返回N作为叶节点,以samples 中最普遍的类标记;//多数表决(6)选择attribute_list 中具有最高信息增益的属性test_attribute; (7)以test_attribute 标记节点N;

(8)For each test_attribute 的已知值v //划分samples ;

(9)由节点N分出一个对应test_attribute=v的分支;

(10令Sv为samples中test_attribute=v 的样本集合;//一个划分块(11)If Sv为空then

(12)加上一个叶节点,以samples中最普遍的类标记;

(13)Else 加入一个由Decision_Tree(Sv,attribute_list-test_attribute)返回节点值。

(2)实验数据预处理

Age:30岁以下标记为“1”;30岁以上50岁以下标记为“2”;50岁以上标记为“3”。 Sex:FEMAL----“1”;MALE----“2”

Region:INNER CITY----“1”;TOWN----“2”; RURAL----“3”; SUBURBAN----“4” Income:5000~2万----“1”;2万~4万----“2”;4万以上----“3” Married Children Car

- . - 总结资料-

Mortgage

Pep:以上五个条件,若为“是”标记为“1”,若为“否”标记为“2”。

Age sex region income married children car mortgage pep

1 2 1 1 2 1 1 2 2

1 2 1 1 2 2 2 2 1

2 1 4 1 2 1 2 2 1

2 1 1 1 1 2 2 2 2

1 2 1 1 1 2 2 2 2

1 2 1 1 2 1 2 1 1

2 1 2 1 1 2 1 1 2

2 1 1 1 2 1 1 2 1

2 1

3 1 2 2 1 2 1

2 1 2 2 2 1 2 2 2

2 2 1 2 2 2 2 1 1

2 1 2 2 1 1 2 1 1

2 2 1 2 1 2 2 1 2

1 1 1

2 1 2 2 2 1

3 2 1 2 1 1 1 2 2

1 1 1

2 1 1 1 2 1

1 1 3

2 2 2 1 2 1

3 1 2 2 1 2 2 2 1

3 2 3 3 1 1 1 2 1

3 2 2 3 1 2 1 1 2

3 1 3 3 1 1 2 2 1

3 2 1 3 1 2 1 2 2

3 2 1 3 1 1 1 1 1

- . - 总结资料-

3 1 1 3 1 2 1 1 2

3 1 3 3 1 2 2 2 2

3 2

4 3 1 2 2 1 1

3 1 3 3 2 2 1 1 2

(3)Matlab语句:

[Tree RulesMatrix]= DecisionTree(DataSet, AttributName);

六、实验结果:

- . - 总结资料-

- . - 总结资料-

- . - 总结资料-

实验程序:

function [Tree RulesMatrix]=DecisionTree(DataSet,AttributName)

%输入为训练集,为离散后的数字,如记录1:1 1 3 2 1;

%前面为属性列,最后一列为类标

if nargin<1

error('请输入数据集');

else

if isstr(DataSet)

[DataSet AttributValue]=readdata2(DataSet);

else

AttributValue=[];

end

end

if nargin<2

AttributName=[];

end

Attributs=[1:size(DataSet,2)-1];

Tree=CreatTree(DataSet,Attributs);

disp([char(13) 'The Decision Tree:']);

showTree(Tree,0,0,1,AttributValue,AttributName);

Rules=getRule(Tree);

RulesMatrix=zeros(size(Rules,1),size(DataSet,2));

for i=1:size(Rules,1)

rule=cell2struct(Rules(i,1),{'str'});

rule=str2num([rule.str([1:(find(rule.str=='C')-1)]) rule.str((find(rule.str=='C')+1):length(rule.str))]);

for j=1:(length(rule)-1)/2

- . - 总结资料-

RulesMatrix(i,rule((j-1)*2+1))=rule(j*2);

end

RulesMatrix(i,size(DataSet,2))=rule(length(rule));

end

end

function Tree=CreatTree(DataSet,Attributs) %决策树程序输入为:数据集,属性名列表%disp(Attributs);

[S ValRecords]=ComputEntropy(DataSet,0);

if(S==0) %当样例全为一类时退出,返回叶子节点类标

for i=1:length(ValRecords)

if(length(ValRecords(i).matrix)==size(DataSet,1))

break;

end

end

Tree.Attribut=i;

Tree.Child=[];

return;

end

if(length(Attributs)==0) %当条件属性个数为0时返回占多数的类标

mostlabelnum=0;

mostlabel=0;

for i=1:length(ValRecords)

if(length(ValRecords(i).matrix)>mostlabelnum)

mostlabelnum=length(ValRecords(i).matrix);

mostlabel=i;

end

- . - 总结资料-

end

Tree.Attribut=mostlabel;

Tree.Child=[];

return;

end

for i=1:length(Attributs)

[Sa(i) ValRecord]=ComputEntropy(DataSet,i);

Gains(i)=S-Sa(i);

AtrributMatric(i).val=ValRecord;

end

[maxval maxindex]=max(Gains);

Tree.Attribut=Attributs(maxindex);

Attributs2=[Attributs(1:maxindex-1) Attributs(maxindex+1:length(Attributs))];

for j=1:length(AtrributMatric(maxindex).val)

DataSet2=[DataSet(AtrributMatric(maxindex).val(j).matrix',1:maxindex-1) DataSet(AtrributMatric(maxindex).val(j).matrix',maxindex+1:size(DataSet,2))];

if(size(DataSet2,1)==0)

mostlabelnum=0;

mostlabel=0;

for i=1:length(ValRecords)

if(length(ValRecords(i).matrix)>mostlabelnum)

mostlabelnum=length(ValRecords(i).matrix);

mostlabel=i;

end

end

Tree.Child(j).root.Attribut=mostlabel;

- . - 总结资料-

Tree.Child(j).root.Child=[];

else

Tree.Child(j).root=CreatTree(DataSet2,Attributs2);

end

end

end

function [Entropy RecordVal]=ComputEntropy(DataSet,attribut) %计算信息熵

if(attribut==0)

clnum=0;

for i=1:size(DataSet,1)

if(DataSet(i,size(DataSet,2))>clnum) %防止下标越界

classnum(DataSet(i,size(DataSet,2)))=0;

clnum=DataSet(i,size(DataSet,2));

RecordVal(DataSet(i,size(DataSet,2))).matrix=[];

end

classnum(DataSet(i,size(DataSet,2)))=classnum(DataSet(i,size(DataSet,2)))+1;

RecordVal(DataSet(i,size(DataSet,2))).matrix=[RecordVal(DataSet(i,size(DataSet,2))).matrix i];

end

Entropy=0;

for j=1:length(classnum)

P=classnum(j)/size(DataSet,1);

if(P~=0)

Entropy=Entropy+(-P)*log2(P);

end

end

- . - 总结资料-

else

valnum=0;

for i=1:size(DataSet,1)

if(DataSet(i,attribut)>valnum) %防止参数下标越界

clnum(DataSet(i,attribut))=0;

valnum=DataSet(i,attribut);

Valueexamnum(DataSet(i,attribut))=0;

RecordVal(DataSet(i,attribut)).matrix=[]; %将编号保留下来,以方便后面按值分割数据集

end

if(DataSet(i,size(DataSet,2))>clnum(DataSet(i,attribut))) %防止下标越界

Value(DataSet(i,attribut)).classnum(DataSet(i,size(DataSet,2)))=0;

clnum(DataSet(i,attribut))=DataSet(i,size(DataSet,2));

end

Value(DataSet(i,attribut)).classnum(DataSet(i,size(DataSet,2)))= Value(DataSet(i,attribut)).classnum(DataSet(i,size(DataSet,2)))+1;

Valueexamnum(DataSet(i,attribut))= Valueexamnum(DataSet(i,attribut))+1;

RecordVal(DataSet(i,attribut)).matrix=[RecordVal(DataSet(i,attribut)).matrix i];

end

Entropy=0;

for j=1:valnum

Entropys=0;

for k=1:length(Value(j).classnum)

P=Value(j).classnum(k)/Valueexamnum(j);

if(P~=0)

Entropys=Entropys+(-P)*log2(P);

end

end

- . - 总结资料-

Entropy=Entropy+(Valueexamnum(j)/size(DataSet,1))*Entropys;

end

end

end

function showTree(Tree,level,value,branch,AttributValue,AttributName) blank=[];

for i=1:level-1

if(branch(i)==1)

blank=[blank ' |'];

else

blank=[blank ' '];

end

end

blank=[blank ' '];

if(level==0)

blank=[' (The Root):'];

else

if isempty(AttributValue)

blank=[blank '|_____' int2str(value) '______'];

else

blank=[blank '|_____' value '______'];

end

end

if(length(Tree.Child)~=0) %非叶子节点

if isempty(AttributName)

disp([blank 'Attribut ' int2str(Tree.Attribut)]);

- . - 总结资料-

else

disp([blank 'Attribut ' AttributName{T ree.Attribut}]);

end

if isempty(AttributValue)

for j=1:length(Tree.Child)-1

showTree(Tree.Child(j).root,level+1,j,[branch 1],AttributValue,AttributName);

end

showTree(Tree.Child(length(Tree.Child)).root,level+1,length(Tree.Child),[branch(1:length(branch)-1) 0 1],AttributValue,AttributName);

else

for j=1:length(Tree.Child)-1

showTree(Tree.Child(j).root,level+1,AttributValue{Tree.Attribut}{j},[branch 1],AttributValue,AttributName);

end

showTree(Tree.Child(length(Tree.Child)).root,level+1,AttributValue{Tree.Attribut}{length(Tree.Child)},[branch(1:length(branch)-1) 0 1],AttributValue,AttributName);

end

else

if isempty(AttributValue)

disp([blank 'leaf ' int2str(Tree.Attribut)]);

else

disp([blank 'leaf ' AttributValue{length(AttributValue)}{Tree.Attribut}]);

end

end

end

function Rules=getRule(Tree)

if(length(Tree.Child)~=0)

Rules={};

- . - 总结资料-

for i=1:length(Tree.Child)

content=getRule(Tree.Child(i).root);

%disp(content);

%disp([num2str(Tree.Attribut) ',' num2str(i) ',']);

for j=1:size(content,1)

rule=cell2struct(content(j,1),{'str'});

content(j,1)={[num2str(Tree.Attribut) ',' num2str(i) ',' rule.str]};

end

Rules=[Rules;content];

end

else

Rules={['C' num2str(Tree.Attribut)]};

end

end

- . - 总结资料-

数据挖掘实验报告

《数据挖掘》Weka实验报告 姓名_学号_ 指导教师 开课学期2015 至2016 学年 2 学期完成日期2015年6月12日

1.实验目的 基于https://www.doczj.com/doc/fa3848315.html,/ml/datasets/Breast+Cancer+WiscOnsin+%28Ori- ginal%29的数据,使用数据挖掘中的分类算法,运用Weka平台的基本功能对数据集进行分类,对算法结果进行性能比较,画出性能比较图,另外针对不同数量的训练集进行对比实验,并画出性能比较图训练并测试。 2.实验环境 实验采用Weka平台,数据使用来自https://www.doczj.com/doc/fa3848315.html,/ml/Datasets/Br- east+Cancer+WiscOnsin+%28Original%29,主要使用其中的Breast Cancer Wisc- onsin (Original) Data Set数据。Weka是怀卡托智能分析系统的缩写,该系统由新西兰怀卡托大学开发。Weka使用Java写成的,并且限制在GNU通用公共证书的条件下发布。它可以运行于几乎所有操作平台,是一款免费的,非商业化的机器学习以及数据挖掘软件。Weka提供了一个统一界面,可结合预处理以及后处理方法,将许多不同的学习算法应用于任何所给的数据集,并评估由不同的学习方案所得出的结果。 3.实验步骤 3.1数据预处理 本实验是针对威斯康辛州(原始)的乳腺癌数据集进行分类,该表含有Sample code number(样本代码),Clump Thickness(丛厚度),Uniformity of Cell Size (均匀的细胞大小),Uniformity of Cell Shape (均匀的细胞形状),Marginal Adhesion(边际粘连),Single Epithelial Cell Size(单一的上皮细胞大小),Bare Nuclei(裸核),Bland Chromatin(平淡的染色质),Normal Nucleoli(正常的核仁),Mitoses(有丝分裂),Class(分类),其中第二项到第十项取值均为1-10,分类中2代表良性,4代表恶性。通过实验,希望能找出患乳腺癌客户各指标的分布情况。 该数据的数据属性如下: 1. Sample code number(numeric),样本代码; 2. Clump Thickness(numeric),丛厚度;

实验二-决策树实验-实验报告

决策树实验 一、实验原理 决策树是一个类似于流程图的树结构,其中每个内部结点表示在一个属性上的测试,每个分支代表一个测试输入,而每个树叶结点代表类或类分布。数的最顶层结点是根结点。一棵典型的决策树如图1所示。它表示概念buys_computer,它预测顾客是否可能购买计算机。内部结点用矩形表示,而树叶结点用椭圆表示。为了对未知的样本分类,样本的属性值在决策树上测试。决策树从根到叶结点的一条路径就对应着一条合取规则,因此决策树容易转化成分类规则。 图1 ID3算法: ■决策树中每一个非叶结点对应着一个非类别属性,树枝代表这个属性的值。一个叶结点代表从树根到叶结点之间的路径对应的记录所属的类别属性值。 ■每一个非叶结点都将与属性中具有最大信息量的非类别属性相关联。 ■采用信息增益来选择能够最好地将样本分类的属性。 信息增益基于信息论中熵的概念。ID3总是选择具有最高信息增益(或最大熵压缩)的属性作为当前结点的测试属性。该属性使得对结果划分中的样本分类所需的信息量最小,并反映划分的最小随机性或“不纯性”。 二、算法伪代码 算法Decision_Tree(data,AttributeName) 输入由离散值属性描述的训练样本集data; 候选属性集合AttributeName。 输出一棵决策树。 (1)创建节点N; (2)If samples 都在同一类C中then (3)返回N作为叶节点,以类C标记; (4)If attribute_list为空then (5)返回N作为叶节点,以samples 中最普遍的类标记;//多数表决 (6)选择attribute_list 中具有最高信息增益的属性test_attribute; (7)以test_attribute 标记节点N; (8)For each test_attribute 的已知值v //划分samples

实验报告:乳腺肿瘤数据集基于决策树算法的数据挖掘

基于决策树算法的医疗数据挖掘 一、实验目的 利用商业智能分析项目中的数据分析功能,对乳腺癌数据集breast-cancer基于决策树算法进行挖掘,产生相关规则,从而预测女性乳腺癌复发的高发人群。并通过本次实验掌握决策树算法关联规则挖掘的知识及软件操作,以及提高数据分析能力。 二、实验步骤 1、在SQL server 2005中建立breast-cancer数据库,导入breast-cancer数据集; 2、对该数据集进行数据预处理,包括列名的中文翻译、以及node-caps缺失值的填充,即将‘null’填充成‘?’; 3、新建数据分析服务项目,导入数据源、新建数据源视图、新建挖掘结构,其中,将breast-cancer表中的‘序号’作为标识,‘是否复发’作为分类; 4、部署; 5、查看决策树、依赖关系网络等,并根据结果进行分析、预测。 三、实验结果分析 1、如以下三张图片所示,通过调整依赖网络图的依赖强度,可得出,在众多因素中,‘受侵淋巴结数’、‘肿瘤大小’、‘恶心肿瘤程度’这三个因素对于是否复发的影响是较大的,并且影响强度依次递减。

2、从‘全部’节点的挖掘图例可以看到,在breast-cancer数据集中,复发占了29.91%,不复发占了68.32%,说明乳腺肿瘤的复发还是占了相当一部分比例的,因此此挖掘是具备前提意义的。 3、由下两张图可知,‘受侵淋巴数’这一因素对于是否复发是决定程度是最高的。在‘受侵淋巴结数不等于0-2’(即大于0-2)节点中,复发占了50.19%的比例,不复发占了44.44%的比例,而在‘受侵淋巴结数=0-2’的节点中,复发只占了21.71%的比例,不复发占了77.98%的比例。由此可见,当受侵淋巴节点数大于‘0-2’时,复发的几率比较高。

实验三决策树算法实验实验报告

实验三决策树算法实验 一、实验目的:熟悉和掌握决策树的分类原理、实质和过程;掌握典型的学习算法和实现技术。 二、实验原理: 决策树学习和分类. 三、实验条件: 四、实验内容: 1 根据现实生活中的原型自己创建一个简单的决策树。 2 要求用这个决策树能解决实际分类决策问题。 五、实验步骤: 1、验证性实验: (1)算法伪代码 算法Decision_Tree(data,AttributeName) 输入由离散值属性描述的训练样本集data; 候选属性集合AttributeName。 输出一棵决策树。(1)创建节点N; 资料.

(2)If samples 都在同一类C中then (3)返回N作为叶节点,以类C标记;(4)If attribute_list为空then (5)返回N作为叶节点,以samples 中最普遍的类标记;//多数表决(6)选择attribute_list 中具有最高信息增益的属性test_attribute; (7)以test_attribute 标记节点N; (8)For each test_attribute 的已知值v //划分samples ; (9)由节点N分出一个对应test_attribute=v的分支; (10令Sv为samples中test_attribute=v 的样本集合;//一个划分块(11)If Sv为空then (12)加上一个叶节点,以samples中最普遍的类标记; (13)Else 加入一个由Decision_Tree(Sv,attribute_list-test_attribute)返回节点值。 (2)实验数据预处理 Age:30岁以下标记为“1”;30岁以上50岁以下标记为“2”;50岁以上标记为“3”。 Sex:FEMAL----“1”;MALE----“2” Region:INNER CITY----“1”;TOWN----“2”; RURAL----“3”; SUBURBAN----“4” Income:5000~2万----“1”;2万~4万----“2”;4万以上----“3” Married Children Car Mortgage 资料.

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

实验四决策树 一、实验目的 1.了解典型决策树算法 2.熟悉决策树算法的思路与步骤 3.掌握运用Matlab对数据集做决策树分析的方法 二、实验内容 1.运用Matlab对数据集做决策树分析 三、实验步骤 1.写出对决策树算法的理解 决策树方法是数据挖掘的重要方法之一,它是利用树形结构的特性来对数据进行分类的一种方法。决策树学习从一组无规则、无次序的事例中推理出有用的分类规则,是一种实例为基础的归纳学习算法。决策树首先利用训练数据集合生成一个测试函数,根据不同的权值建立树的分支,即叶子结点,在每个叶子节点下又建立层次结点和分支,如此重利生成决策树,然后对决策树进行剪树处理,最后把决策树转换成规则。决策树的最大优点是直观,以树状图的形式表现预测结果,而且这个结果可以进行解释。决策树主要用于聚类和分类方面的应用。 决策树是一树状结构,它的每一个叶子节点对应着一个分类,非叶子节点对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划分成若干个子集。构造决策树的核心问题是在每一步如何选择适当的属性对样本进行拆分。对一个分类问题,从已知类标记的训练样本中学习并构造出决策树是一个自上而下分而治之的过程。 2.启动Matlab,运用Matlab对数据集进行决策树分析,写出算法名称、数据集名称、关键代码,记录实验过程,实验结果,并分析实验结果 (1)算法名称: ID3算法 ID3算法是最经典的决策树分类算法。ID3算法基于信息熵来选择最佳的测试属性,它选择当前样本集中具有最大信息增益值的属性作为测试属性;样本集的划分则依据测试属性的取值进行,测试属性有多少个不同的取值就将样本集划分为多少个子样本集,同时决策树上相应于该样本集的节点长出新的叶子节点。ID3算法根据信息论的理论,采用划分后样本集的不确定性作为衡量划分好坏的标准,用信息增益值度量不确定性:信息增益值越大,不确定性越小。因此,ID3算法在每个非叶节点选择信息增益最大的属性作为测试属性,这样可以得到当前情况下最纯的划分,从而得到较小的决策树。 ID3算法的具体流程如下: 1)对当前样本集合,计算所有属性的信息增益; 2)选择信息增益最大的属性作为测试属性,把测试属性取值相同的样本划为同一个子样本集; 3)若子样本集的类别属性只含有单个属性,则分支为叶子节点,判断其属性值并标上相应的符号,然后返回调用处;否则对子样本集递归调用本算法。 (2)数据集名称:鸢尾花卉Iris数据集 选择了部分数据集来区分Iris Setosa(山鸢尾)及Iris Versicolour(杂色鸢尾)两个种类。

机器学习实验报告

决策树算法 一、决策树算法简介: 决策树算法是一种逼近离散函数值的方法。它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析。本质上决策树是通过一系列规则对数据进行分类的过程。决策树方法的基本思想是:利用训练集数据自动地构造决策树,然后根据这个决策树对任意实例进行判定。其中决策树(Decision Tree)是一种简单但是广泛使用的分类器。通过训练数据构建决策树,可以高效的对未知的数据进行分类。决策数有两大优点:1)决策树模型可以读性好,具有描述性,有助于人工分析;2)效率高,决策树只需要一次构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。 决策树算法构造决策树来发现数据中蕴涵的分类规则.如何构造精度高、规模小的决策树是决策树算法的核心内容。决策树构造可以分两步进行。第一步,决策树的生成:由训练样本集生成决策树的过程。一般情况下,训练样本数据集是根据实际需要有历史的、有一定综合程度的,用于数据分析处理的数据集。第二步,决策树的剪技:决策树的剪枝是对上一阶段生成的决策树进行检验、校正和修下的过程,主要是用新的样本数扼集(称为测试数据集)中的数据校验决策树生成过程中产生的初步规则,将那些影响预衡准确性的分枝剪除、决策树方法最早产生于上世纪60年代,到70年代末。由J Ross Quinlan 提出了ID3算法,此算法的目的在于减少树的深度。但是忽略了叶子数目的研究。C4.5算法在ID3算法的基础上进行了改进,对于预测变量的缺值处理、剪枝技术、派生规则等方面作了较大改进,既适合于分类问题,又适合于回归问题。 本节将就ID3算法展开分析和实现。 ID3算法: ID3算法最早是由罗斯昆(J. Ross Quinlan)于1975年在悉尼大学提出的一种分类预测算法,算法的核心是“信息熵”。ID3算法通过计算每个属性的信息增益,认为信息增益高的是好属性,每次划分选取信息增益最高的属性为划分标准,重复这个过程,直至生成一个能完美分类训练样例的决策树。 在ID3算法中,决策节点属性的选择运用了信息论中的熵概念作为启发式函数。

实验三-决策树算法实验实验报告

实验三-决策树算法实验实验报告

实验三决策树算法实验 一、实验目的:熟悉和掌握决策树的分类原理、实质和过程;掌握典型的学习算法和实现技术。 二、实验原理: 决策树学习和分类. 三、实验条件: 四、实验内容: 1 根据现实生活中的原型自己创建一个简单的决策树。 2 要求用这个决策树能解决实际分类决策问题。 五、实验步骤: 1、验证性实验: (1)算法伪代码 算法Decision_Tree(data,AttributeName) 输入由离散值属性描述的训练样本集

data; 候选属性集合AttributeName。 输出一棵决策树。(1)创建节点N; (2)If samples 都在同一类C中then (3)返回N作为叶节点,以类C标记;(4)If attribute_list为空then (5)返回N作为叶节点,以samples 中最普遍的类标记;//多数表决(6)选择attribute_list 中具有最高信息增益的属性test_attribute; (7)以test_attribute 标记节点N; (8)For each test_attribute 的已知值v //划分samples ; (9)由节点N分出一个对应test_attribute=v的分支; (10令Sv为samples中test_attribute=v 的样本集合;//一个划分块(11)If Sv 为空then (12)加上一个叶节点,以samples中最普遍的类标记; (13)Else 加入一个由Decision_Tree(Sv,attribute_list-test_attribute)返回节点

随机森林实验报告

随机森林实验报告 实验目的 实现随机森林模型并测试。 实验问题 Kaggle第二次作业Non-linear classification 算法分析与设计 一.算法设计背景: 1.随机森林的原子分类器一般使用决策树,决策树又分为拟合树和分类树。这两者的区别在于代价估值函数的不同。 2.根据经验,用拟合树做分类的效果比分类树略好。 3.对于一个N分类问题,它总是可以被分解为N个2分类问题,这样分解的好处是其决策树更加方便构造,更加简单,且更加有利于用拟合树来构建分类树。对于每一个2分类问题,构造的树又叫CART树,它是一颗二叉树。 4.将N个2分类树的结果进行汇总即可以得到多分类的结果。 树构造:

6.随机森林构造: 二.算法思路: 将一个N分类问题转化为N个二分类问题。转化方法是:构造N棵二叉拟合树,这里假设N为26,然后我们给N棵二叉树依次标号为1,2,3...26。1号树的结果对应于该条记录是不是属于第一类,是则输出1,否则输出号树的结果对应于该条记录是不是属于第二类,是则1否则0,依此类推。这样,我们的26棵二叉树的结果就对应了26个下标。 例如对于某条记录,这26个二叉树的结果按序号排列为{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...1,0},那么这条记录的分类应该为25。要将一个26维的0,1序列变回

一个索引,我们只需要找出这个序列中值最大的元素的索引,这个索引即是序列号。 我们将上面的26棵分别对26个索引做是否判断的二分类树视为一个整体,在多线程的环境下,构造多个这样的整体,然后进行求和运算,最后取出每个结果序列中值最大的元素的下标作为分类值,那么久得到了我们想要的结果,随机森林完成。 三.算法流程: 1.读入训练集trainset,测试集testset 2.将训练集分割为输入trainIn,输出trainOut 3.这里假设类别数N为26,将trainOut[记录条数] 映射为 transformTrainOut[训练记录数][26] 4.初始化transformTestOut[测试记录数][26]全部为0 i = 1 : ForestSize: 策树 在这里,我们每一次26分类是由26棵CART共同完成的,CART的cost function采用的是gini系数,CART的最大层数为7,分裂停止条件为当前节点GINI为0或者当前节点所在层数到达了7. 2.随机森林 a.随机森林每次循环的训练集采样为原训练集的. b.对于森林中每一棵决策树每一次分割点的选取,对属性进行了打乱抽样,抽样数为25,即每次分割只在25个属性中寻找最合适的值。并且对于每个选取的属性,我们进行了行采样。即如果这个属性所拥有的属性值数大于30,我们选取其中30个作为分割候选,如果小于30,则全部纳入分割候选。 四.代码详解 1.训练集/测试集的读入 a.在中定义了:

ID3算法实验报告

ID3算法实验 08级第一小组介绍: ID3算法可分为主算法和建树算法两种。 (1)ID3主算法。主算法流程如图所示。其中PE、NE分别表示正例和反例集,它们共同组成训练集。PE'、PE''和NE'、NE''分别表示正例集和反例集的子集。 ID3主算法流程 (2)建树算法。采用建树算法建立决策树。首先,对当前子例进行同类归集。其次,计算各集合属性的互信息,选择互信息最大的属性Ak。再次,将在Ak处取值相同的子例归于同一子集,Ak取几个值就几个子集。最后,对既含正例又含反例的子集递归调用建树算法。若子集仅含正例或反例,对应分支标上P或N,返回调用处。 ID3算法采用自顶向下不回溯的策略搜索全部属性空间并建立决策树,算法简单、深度小、分类速度快。但是,ID3算法对于大的属性集执行效率下降快、准确性降低,并且学习能力低下。考虑到本文所涉及到的数据量并很小,下文分类分析采用了该算法。 决策树学习是把实例从根结点排列到某个叶子结点来分类实例,叶子结点即为实例所属的分类。学习到的决策树能再被表示成多个if-then的规则。ID3算法是一种决策树算法。 对下载的ID3算法程序进行阅读和调试后,做了相关实验,以下是相关记录。 1、试验数据 该算法的试验数据有两个:data.dat和data.tag,分别存放训练样例和各个属性列表:

data.dat: data.tag: 其中,训练样例集合的试验数据由课本第3.4。2节给出,分别将其属性使用离散值数据表示,在data.tag文件中可以看到离散值其表示的属性分别对应。 2、运行结果 试验结果,是以if-then形式输出决策树,其运行界面如图:

数据挖掘及决策树

理工大学信息工程与自动化学院学生实验报告 ( 2016 — 2017 学年第学期) 信自楼444 一、上机目的及容 目的: 1.理解数据挖掘的基本概念及其过程; 2.理解数据挖掘与数据仓库、OLAP之间的关系 3.理解基本的数据挖掘技术与方法的工作原理与过程,掌握数据挖掘相关工具的使用。 容: 给定AdventureWorksDW数据仓库,构建“Microsoft 决策树”模型,分析客户群中购买自行车的模式。 要求: 利用实验室和指导教师提供的实验软件,认真完成规定的实验容,真实地记录实验中遇到的 二、实验原理及基本技术路线图(方框原理图或程序流程图) 请描述数据挖掘及决策树的相关基本概念、模型等。 1.数据挖掘:从大量的、不完全的、有噪音的、模糊的、随机的数据中,提取隐含在其中的、 人们事先不知道的、但又潜在有用的信息和知识的过程。

项集的频繁模式 分类与预测分类:提出一个分类函数或者分类模型,该模型能把数据库中的数据项 映射到给定类别中的一个; 预测:利用历史数据建立模型,再运用最新数据作为输入值,获得未来 变化趋势或者评估给定样本可能具有的属性值或值的围 聚类分析根据数据的不同特征,将其划分为不同数据类 偏差分析对差异和极端特例的描述,揭示事物偏离常规的异常现象,其基本思想 是寻找观测结果与参照值之间有意义的差别 3.决策树:是一种预测模型,它代表的是对象属性与对象值之间的一种映射关系。树中每个 节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从 根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输 出,可以建立独立的决策树以处理不同输出。 算法概念 ID3 在实体世界中,每个实体用多个特征来描述。每个特征限于在一 个离散集中取互斥的值 C4.5 对ID3算法进行了改进: 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选 择取值多的属性的不足;在树构造过程中进行剪枝;能够完成对 连续属性的离散化处理;能够对不完整数据进行处理。 三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC及Microsoft SQL Server套件 四、实验方法、步骤(或:程序代码或操作过程) (一)准备 Analysis Services 数据库 1.Analysis Services 项目创建成功

机器学习实验报告

《机器学习》课内实验报告(1) ID算法实现决策树2015 - 2016学年第 2 学期 专业:智能科学与技术 班级:智能1301班 学号:06133029 姓名:张争辉

一、实验目的: 理解ID3算法的基本原理,并且编程实现。 二、实验要求: 使用C/C++/MATLAB实现ID3算法。 输入: 若干行,每行 5 个字符串,表示 Outlook Temperature Humidity Wind Play ball 如上表。 输出: 决策树。 实验结果如下: 输入: Sunny Hot High Weak No Sunny Hot High Strong No Overcast Hot High Weak Yes Rain Mild High Weak Yes Rain Cool Normal Weak Yes Rain Cool Normal Strong No Overcast Cool Normal Strong Yes Sunny Mild High Weak No Sunny Cool Normal Weak Yes Rain Mild Normal Weak Yes Sunny Mild Normal Strong Yes Overcast Mild High Strong Yes Overcast Hot Normal Weak Yes Rain Mild High Strong No 输出: Outlook Rain Wind Strong No Weak Yes Overcast Yes Sunny Humidity

Normal Yes High No 三、具体实现: 实现算法如下: #include #include #include #include using namespace std; #define ROW 14 #define COL 5 #define log2 0.69314718055 typedef struct TNode { char data[15]; char weight[15]; TNode * firstchild,*nextsibling; }*tree; typedef struct LNode { char OutLook[15]; char Temperature[15]; char Humidity[15]; char Wind[15]; char PlayTennis[5]; LNode *next; }*link; typedef struct AttrNode { char attributes[15];//属性 int attr_Num;//属性的个数 AttrNode *next; }*Attributes; char * Examples[ROW][COL] = {//"OverCast","Cool","High","Strong","No", // "Rain","Hot","Normal","Strong","Yes", "Sunny","Hot","High","Weak","No", "Sunny","Hot","High","Strong","No", "OverCast","Hot","High","Weak","Yes",

决策树 实验报告

实验(实习)名称决策树分析 一.实验要求: (1)学习决策树分类学习方法,学习其中C4.5学习算法,了解其他ADtree、Id3等其它分类学习方法。 (2)应用Weka软件,学会导入数据文件,并对数据文件进行预处理。 (3)学会如何选择学习函数并调节学习训练参数以达到最佳学习效果。 (4)学习并应用其他决策树学习算法,可以进行各种算法对照比较。 二.实验操作 (1)在开始程序(或者桌面图标)中找到WEKA3.6.2,单击即可启动WEKA,启动WEKA 时会发现首先出现的一个命令提示符。接着将出现如下Weka GUI Chooser界面。 (2)选择GUI Chooser中的探索者(Explorer)用户界面。点击预处理(Preprocess)功能按钮的,Open file,选择其中的“weather”数据作关联规则的分析。打开“weather.arff”,可以看到“Current relation”、“Attributes”“Selected attribute”三个区域。 (3)点击“Classify”选项卡。单击左上方的Choose按钮,在随后打开的层级式菜单中的tree部分找到J48。 (4)选中J48分类器后,J48以及它的相关默认参数值出现在Choose按钮旁边的条形框中。单击这个条形框会打开J48分类器的对象编辑器,编辑器会显示J48的各个参数的含义。根据实际情况选择适当的参数,探索者通常会合理地设定这些参数的默认值。 三.实验结果:

计算正确率可得: (74+132)/(74+30+64+132)=0.69 四.实验小结: 通过本次试验,我学习了决策树分类方法,以及其中C4.5算法,并了解了其他ADtree、Id3等其它分类方法,应用Weka软件,学会导入数据文件,并对数据文件进行预处理,今后还需努力。 。

模式识别实验报告

河海大学物联网工程学院 《模式识别》 课程实验报告 学号 _______________ 专业 ____计算机科学与技术_____ 授课班号 _________________________ 学生姓名 ___________________ 指导教师 ___________________ 完成时间 _______________

实验报告格式如下(必要任务必须写上,可选的课后实验任务是加分项,不是必要任务,可不写): 实验一、Fisher分类器实验 1.实验原理 如果在二维空间中一条直线能将两类样本分开,或者错分类很少,则同一类别样本数据在该直线的单位法向量上的投影的绝大多数都应该超过某一值。而另一类数据的投影都应该小于(或绝大多数都小于)该值,则这条直线就有可能将两类分开。 准则:向量W的方向选择应能使两类样本投影的均值之差尽可能大些,而使类內样本的离散程度尽可能小。 2.实验任务 (1)两类各有多少组训练数据?(易) (2)试着用MATLAB画出分类线,用红色点划线表示(中) (3)画出在投影轴线上的投影点(较难) 3.实验结果 (1)第一类数据有200组训练数据,第二类数据有100组训练数据。 (2)如图所示,先得出投影线的斜率,后求其投影线的垂直线的斜率,即分类线的斜率,再求分类线的过的中垂点,加上即可得出。 画出红线代码:m = (-40:0.1:80); kw = w(2)/w(1); b = classify(w1, w2, w, 0); disp(b);

n = (-1/kw).* m + b; plot(m,n,'r-', 'LineWidth', 3); (3)画出投影上的投影点 如图,点用X表示。 代码: u = w/sqrt(sum(w.^2)); p1 = w1*u*u'; plot(p1(:,1),p1(:,2),'r+') p2 = w2*u*u'; plot(p2(:,1),p2(:,2),'b+') 实验二、感知器实验 1.实验原理 (1)训练数据必须是线性可分的 (2)最小化能量,惩罚函数法-错分样本的分类函数值之和(小于零)作为惩罚值(3)方法:梯度下降法,对权值向量的修正值-错分样本的特征向量 2.实验任务 (1)训练样本不线性可分时,分类结果如何?

数据挖掘技术与应用实验报告

数据挖掘技术与应用实验报告 专业:_______________________ 班级:_______________________ 学号:_______________________ 姓名:_______________________ 2012-2013学年第二学期 经济与管理学院

实验名称:SPSS Clementine 软件安装、功能演练 指导教师: 实验日期: 成绩: 实验目的 1、熟悉SPSS Clementine 软件安装、功能和操作特点。 2、了解SPSS Clementine 软件的各选项面板和操作方法。 3、熟练掌握SPSS Clementine 工作流程。 实验内容 1、打开SPSS Clementine 软件,逐一操作各选项,熟悉软件功能。 2、打开一有数据库、或新建数据文件,读入SPSS Clementine,并使用各种输出节点,熟悉数据输入输出。(要求:至少做access数据库文件、excel文件、txt文件、可变文件的导入、导出) 实验步骤 一实验前准备: 1.下载SPSS Clementine 软件安装包和一个虚拟光驱。 2.选择任意盘区安装虚拟光驱,并把下载的安装包的文件(后缀名bin)添加到虚拟光驱上,然后双击运行。 3.运行安装完成后,把虚拟光驱中CYGiSO文件中的lservrc文件和PlatformSPSSLic7.dll文件复制替换到安装完成后的bin文件中,完成破解,获得永久免费使用权。 4.运行中文破解程序,对SPSS Clementine 软件进行汉化。 二实验操作: 1、启动Clementine:从Windows 的“开始”菜单中选择:所有程序/SPSS Clementine 12.0/SPSS Clementine client 12.0 2、Clementine窗口当第一次启动Clementine 时,工作区将以默认视图打开。中间的区域称作流工作区。在Clementine 中,这将是用来工作的主要区域。Clementine 中绝大部分的数据和建模工具都在选项板中,该区域位于流工作区的下方。每个选项卡都包含一组以图形表示数据挖掘任务的节点,例如访问和过滤数据,创建图形和构建模型。 Clementine 中绝大部分的数据和建模工具都在选项板中,该区域位于流工作区的下方。每个选项卡都包含一组以图形表示数据挖掘任务的节点,例如访问和过滤数据,创建图形和构建模型。 要将节点添加到工组区,可在节点选项板中双击图标或将其拖拽至工作区后释

数据挖掘实验报告三

数据挖掘实验报告 班级统计121班学号姓名胡越 实验名称实验三:分类知识挖掘实验类型综合性实验 实验目的: (1)掌握利用决策树(C4.5算法)进行分类的方法。 (2)掌握利用朴素贝叶斯分类的方法。 实验要求: (1)对数据集bankdata.arff利用决策树(C4.5算法)进行分类,给出得出的决策树及分类器的性能评价指标,并利用建立的分类模型对下列表中给出的实例进行分类。 age sex region income married children car save_act current_act mortgage pep 21 MALE TOWN 5014.21 NO 0 YES YES YES YES 42 MALE INNER_CITY 17390.1 YES 0 NO YES YES NO 59 FEMALE RURAL 35610.5 NO 2 YES NO NO NO 45 FEMALE TOWN 26948 NO 0 NO YES YES YES 58 FEMALE TOWN 34524.9 YES 2 YES YES NO NO 30 MALE INNER_CITY 27808.1 NO 3 NO NO YES NO (2)对数据集bankdata.arff利用朴素贝叶斯分类方法进行分类,给出分类模型的参数及分类器的性能评价指标,并利用建立的分类模型对上表中给出的实例进行分类。 实验结果: (1) 分类器的性能评价指标: Kappa statistic 0.7942 age sex region income married children car save_act current_act mortgage pep 21 MALE TOWN 5014.21 NO 0 YES YES YES YES no 42 MALE INNER_CITY 17390.1 YES 0 NO YES YES NO no 59 FEMALE RURAL 35610.5 NO 2 YES NO NO NO yes 45 FEMALE TOWN 26948 NO 0 NO YES YES YES no 58 FEMALE TOWN 34524.9 YES 2 YES YES NO NO yes 30 MALE INNER_CITY 27808.1 NO 3 NO NO YES NO no

集成学习实验报告

Bagging与AdaBoostM2的Matlab中的实现 在集成学习过去的研究中发现:Bagging集成学习算法和Boosting算法结合决策树基础学习器的实现的划分的效果是最好的。针对这种情况,我这次实现的问题就是在Matlab中利用决策树基础学习器实现Bagging集成学习算法和Boosting算法当前最流行的版本AdaBoostM2算法。 程序主要模块 Bagging集成学习算法的实现 下面主要介绍我的Bagging集成学习算法的实现程序,由于matlab直接集成了Bagging的决策树函数,所以Bagging实现很简单,只需对TreeBagger系统函数进行简单的参数设置就可以实现最强大的Bagging集成学习算法。我主要建了两个脚本文件实现Bagging集成学习算法,分别是classify.m文件和BaggingUseDT.m两个文件。 Classify函数 classify.m文件主要的功能是对建立好的集成学习器进行调用实现分类的目的。Classify 函数主要有三个输入参数和一个输出参数: 输入参数1:meas:代表的是训练集样本的属性矩阵,每一行代表一个样本的一组属性值。 输入参数2:species:代表的是训练集样本的真实类别列向量,species的行数由于meas 一致。 输入参数3:attList:代表的要进行分类的样本的一组属性值组成的行向量,该行向量的列数与meas矩阵的行数相同。 输出参数:class返回集成学习器判断attList向量对应的样本所属的类。BaggingUseDT函数 BaggingUseDT.m文件主要的功能是建立基于决策树的Bagging集成学习器,BaggingUseDT函数也有三个输入参数和一个输出参数。 输入参数1:X:代表的是训练集样本的属性矩阵,每一行代表一个样本的一组属性值。 输入参数2:Y:代表的是训练集样本的真实类别列向量,species的行数由于meas一致。 输入参数3:ens:返回利用训练集样本属性矩X和训练集样本的真实类别列向量Y训练得到的集成学习器。

数据挖掘期末实验报告

数据挖掘技术期末报告 理学院 姓名: 学号: 联系电话: 专业班级: 评分:优□|良□|中□|及格□|不及格□

一、实验目的 基于从UCI公开数据库中下载的数据,使用数据挖掘中的分类算法,用Weka 平台的基本功能对数据集进行分类,对算法结果进行性能比较,画出性能比较图,另外针对不同数量的训练集进行对比实验,并画出性能比较图训练并测试。 二、实验环境 实验采用Weka平台,数据使用来自从UCI公开数据库中下载,主要使用其中的Breast Cancer Wisc-onsin (Original) Data Set数据。Weka是怀卡托智能分析系统的缩写,该系统由新西兰怀卡托大学开发。Weka使用Java写成的,并且限制在GNU通用公共证书的条件下发布。它可以运行于几乎所有操作平台,是一款免费的,非商业化的机器学习以及数据挖掘软件。Weka提供了一个统一界面,可结合预处理以及后处理方法,将许多不同的学习算法应用于任何所给的数据集,并评估由不同的学习方案所得出的结果。 三、实验步骤 3.1数据预处理 本实验是针对威斯康辛州(原始)的乳腺癌数据集进行分类,该表含有Sample code number(样本代码),Clump Thickness(丛厚度),Uniformity of Cell Size(均匀的细胞大小),Uniformity of Cell Shape (均匀的细胞形状),Marginal Adhesion (边际粘连),Single Epithelial Cell Size(单一的上皮细胞大小),Bare Nuclei(裸核),Bland Chromatin(平淡的染色质),Normal Nucleoli(正常的核仁),Mitoses (有丝分裂),Class(分类),其中第二项到第十项取值均为1-10,分类中2代表良性,4代表恶性。通过实验,希望能找出患乳腺癌客户各指标的分布情况。 该数据的数据属性如下: 1. Sample code number(numeric),样本代码; 2. Clump Thickness(numeric),丛厚度; 3.Uniformity of Cell Size(numeric)均匀的细胞大小; 4. Uniformity of Cell Shape(numeric),均匀的细胞形状; 5.Marginal Adhesion(numeric),边际粘连; 6.Single Epithelial Cell Size(numeric),单一的上皮细胞大小; 7.Bare Nuclei(numeric),裸核;

数据挖掘实验报告二

一、基本原理 分类算法是解决分类问题的方法,是数据挖掘、机器学习和模式识别中一个重要的研究领域。分类算法通过对已知类别训练集的分析,从中发现分类规则,以此预测新数据的类别。分类算法的应用非常广泛,银行中风险评估、客户类别分类、文本检索和搜索引擎分类、安全领域中的入侵检测以及软件项目中的应用等。 二、实验目的: 掌握CART决策树构建分类模型。 三、实验内容 对所有窃漏电用户及真诚用户的电量、告警及线损数据和该用户在当天是否窃漏电的标识,按窃漏电评价指标进行处理并选取其中291个样本数据,得到专家样本,使用CART决策树实现分类预测模型。 注意:数据的80%作为训练样本,剩下的20%作为测试样本。 四、实验步骤 1、对数据进行预处理 2、把数据随机分为两部分,一部分用于训练,一部分用于测试。 分成testData和trainData文件即测试数据和训练数据数据的80%作为训练样本,剩下的20%作为测试样本。 3、使用tree包里的tree函数以及训练数据构建CART决策树模型,使用predict函 数和构建的CART决策树模型分别对训练数据和测试数据进行分类。 4、使用nnet包里面的nnet函数以及训练数据构建神经网络模型,使用predict函数

和构建的神经网络模型分别对训练数据和测试数据进行分类。 5、对比分析CART决策树和神经网络模型对数据处理的结果。 五、实验结果 六、思考与分析 尝试采用神经网络对数据进行分类,并与CART决策树的结果进行比较。 答:与神经网络相比,决策树可以很好地处理非数值型的数据,但是决策树对连续的数据(比如连续的数值型数据)不太擅长。

机器学习实验报告

《机器学习》 课实验报告 (1)ID算法实现决策树2015 - 2016学年第 2 学期 专业:智能科学与技术 班级:智能1301班 学号:06133029 :争辉

一、实验目的: 理解ID3算法的基本原理,并且编程实现。 二、实验要求: 使用C/C++/MATLAB实现ID3算法。 输入: 若干行,每行 5 个字符串,表示 Outlook Temperature Humidity Wind Play ball 如上表。 输出: 决策树。 实验结果如下: 输入: Sunny Hot High Weak No Sunny Hot High Strong No Overcast Hot High Weak Yes Rain Mild High Weak Yes Rain Cool Normal Weak Yes Rain Cool Normal Strong No Overcast Cool Normal Strong Yes Sunny Mild High Weak No Sunny Cool Normal Weak Yes Rain Mild Normal Weak Yes Sunny Mild Normal Strong Yes Overcast Mild High Strong Yes Overcast Hot Normal Weak Yes Rain Mild High Strong No 输出: Outlook Rain Wind Strong No Weak Yes Overcast Yes Sunny Humidity

Normal Yes High No 三、具体实现: 实现算法如下: #include #include #include #include using namespace std; #define ROW 14 #define COL 5 #define log2 0. typedef struct TNode { char data[15]; char weight[15]; TNode * firstchild,*nextsibling; }*tree; typedef struct LNode { char OutLook[15]; char Temperature[15]; char Humidity[15]; char Wind[15]; char PlayTennis[5]; LNode *next; }*link; typedef struct AttrNode { char attributes[15];//属性 int attr_Num;//属性的个数 AttrNode *next; }*Attributes; char * Examples[ROW][COL] = {//"OverCast","Cool","High","Strong","No", // "Rain","Hot","Normal","Strong","Yes", "Sunny","Hot","High","Weak","No", "Sunny","Hot","High","Strong","No",

相关主题
文本预览
相关文档 最新文档