决策树分类算法的时间和性能测试.docx
《决策树分类算法的时间和性能测试.docx》由会员分享,可在线阅读,更多相关《决策树分类算法的时间和性能测试.docx(25页珍藏版)》请在冰豆网上搜索。
![决策树分类算法的时间和性能测试.docx](https://file1.bdocx.com/fileroot1/2023-4/18/6452f7fa-7e53-40ef-98d6-14ce374e25a8/6452f7fa-7e53-40ef-98d6-14ce374e25a81.gif)
决策树分类算法的时间和性能测试
决策树分类算法的时间和性能测试
姓名:
ls
学号:
目录
一、项目要求3
二、基本思想3
三、样本处理4
四、实验及其分析9
1.总时间9
2.分类准确性.12
五、结论及不足13
附录14
一、项目要求
(1)设计并实现决策树分类算法(可参考网上很多版本的决策树算法及代码,但算法的基本思想应为以上所给内容)。
(2)使用UCI的基准测试数据集,测试所实现的决策树分类算法。
评价指标包括:
总时间、分类准确性等。
(3)使用UCIIrisDataSet进行测试。
2、基本思想
决策树是一个类似于流程图的树结构,其中每个内部节点表示在一个属性变量上的测试,每个分支代表一个测试输出,而每个叶子节点代表类或分布,树的最顶层节点是根节点。
当需要预测一个未知样本的分类值时,基于决策树,沿着该树模型向下追溯,在树的每个节点将该样本的变量值和该节点变量的阈值进行比较,然后选取合适的分支,从而完成分类。
决策树能够很容易地转换成分类规则,成为业务规则归纳系统的基础。
决策树算法是非常常用的分类算法,是逼近离散目标函数的方法,学习得到的函数以决策树的形式表示。
其基本思路是不断选取产生信息增益最大的属性来划分样例集和,构造决策树。
信息增益定义为结点与其子结点的信息熵之差。
信息熵是香农提出的,用于描述信息不纯度(不稳定性),其计算公式是
Pi为子集合中不同性(而二元分类即正样例和负样例)的样例的比例。
这样信息收益可以定义为样本按照某属性划分时造成熵减少的期望,可以区分训练样本中正负样本的能力,其计算公式是
三、样本处理
以UCI提供的IrisPlantsDatabase为测试样本,IrisPlants共有sepal-length,sepal-width,petal-length,petal-width四种属性,根据属性的不同分为三种:
class:
--IrisSetosa--IrisVersicolour--IrisVirginica
为方便实现,只取IrisSetosa和IrisVersicolour这两种植物的样例进行测试。
实现该算法的样例集合如下:
5.1,3.5,1.4,0.2,Iris-setosa4.9,3.0,1.4,0.2,Iris-setosa4.7,3.2,1.3,0.2,Iris-setosa4.6,3.1,1.5,0.2,Iris-setosa5.0,3.6,1.4,0.2,Iris-setosa5.4,3.9,1.7,0.4,Iris-setosa4.6,3.4,1.4,0.3,Iris-setosa5.0,3.4,1.5,0.2,Iris-setosa4.4,2.9,1.4,0.2,Iris-setosa4.9,3.1,1.5,0.1,Iris-setosa5.4,3.7,1.5,0.2,Iris-setosa4.8,3.4,1.6,0.2,Iris-setosa4.8,3.0,1.4,0.1,Iris-setosa4.3,3.0,1.1,0.1,Iris-setosa5.8,4.0,1.2,0.2,Iris-setosa5.7,4.4,1.5,0.4,Iris-setosa5.4,3.9,1.3,0.4,Iris-setosa5.1,3.5,1.4,0.3,Iris-setosa5.7,3.8,1.7,0.3,Iris-setosa5.1,3.8,1.5,0.3,Iris-setosa5.4,3.4,1.7,0.2,Iris-setosa5.1,3.7,1.5,0.4,Iris-setosa4.6,3.6,1.0,0.2,Iris-setosa5.1,3.3,1.7,0.5,Iris-setosa4.8,3.4,1.9,0.2,Iris-setosa5.0,3.0,1.6,0.2,Iris-setosa5.0,3.4,1.6,0.4,Iris-setosa5.2,3.5,1.5,0.2,Iris-setosa5.2,3.4,1.4,0.2,Iris-setosa4.7,3.2,1.6,0.2,Iris-setosa4.8,3.1,1.6,0.2,Iris-setosa5.4,3.4,1.5,0.4,Iris-setosa5.2,4.1,1.5,0.1,Iris-setosa5.5,4.2,1.4,0.2,Iris-setosa4.9,3.1,1.5,0.1,Iris-setosa5.0,3.2,1.2,0.2,Iris-setosa5.5,3.5,1.3,0.2,Iris-setosa4.9,3.1,1.5,0.1,Iris-setosa4.4,3.0,1.3,0.2,Iris-setosa5.1,3.4,1.5,0.2,Iris-setosa5.0,3.5,1.3,0.3,Iris-setosa4.5,2.3,1.3,0.3,Iris-setosa4.4,3.2,1.3,0.2,Iris-setosa5.0,3.5,1.6,0.6,Iris-setosa5.1,3.8,1.9,0.4,Iris-setosa4.8,3.0,1.4,0.3,Iris-setosa5.1,3.8,1.6,0.2,Iris-setosa4.6,3.2,1.4,0.2,Iris-setosa5.3,3.7,1.5,0.2,Iris-setosa5.0,3.3,1.4,0.2,Iris-setosa7.0,3.2,4.7,1.4,Iris-versicolor6.4,3.2,4.5,1.5,Iris-versicolor6.9,3.1,4.9,1.5,Iris-versicolor5.5,2.3,4.0,1.3,Iris-versicolor6.5,2.8,4.6,1.5,Iris-versicolor5.7,2.8,4.5,1.3,Iris-versicolor6.3,3.3,4.7,1.6,Iris-versicolor4.9,2.4,3.3,1.0,Iris-versicolor6.6,2.9,4.6,1.3,Iris-versicolor5.2,2.7,3.9,1.4,Iris-versicolor5.0,2.0,3.5,1.0,Iris-versicolor5.9,3.0,4.2,1.5,Iris-versicolor6.0,2.2,4.0,1.0,Iris-versicolor6.1,2.9,4.7,1.4,Iris-versicolor5.6,2.9,3.6,1.3,Iris-versicolor6.7,3.1,4.4,1.4,Iris-versicolor5.6,3.0,4.5,1.5,Iris-versicolor5.8,2.7,4.1,1.0,Iris-versicolor6.2,2.2,4.5,1.5,Iris-versicolor5.6,2.5,3.9,1.1,Iris-versicolor5.9,3.2,4.8,1.8,Iris-versicolor6.1,2.8,4.0,1.3,Iris-versicolor6.3,2.5,4.9,1.5,Iris-versicolor6.1,2.8,4.7,1.2,Iris-versicolor6.4,2.9,4.3,1.3,Iris-versicolor6.6,3.0,4.4,1.4,Iris-versicolor6.8,2.8,4.8,1.4,Iris-versicolor6.7,3.0,5.0,1.7,Iris-versicolor6.0,2.9,4.5,1.5,Iris-versicolor5.7,2.6,3.5,1.0,Iris-versicolor5.5,2.4,3.8,1.1,Iris-versicolor5.5,2.4,3.7,1.0,Iris-versicolor5.8,2.7,3.9,1.2,Iris-versicolor6.0,2.7,5.1,1.6,Iris-versicolor5.4,3.0,4.5,1.5,Iris-versicolor6.0,3.4,4.5,1.6,Iris-versicolor6.7,3.1,4.7,1.5,Iris-versicolor6.3,2.3,4.4,1.3,Iris-versicolor5.6,3.0,4.1,1.3,Iris-versicolor5.5,2.5,4.0,1.3,Iris-versicolor5.5,2.6,4.4,1.2,Iris-versicolor6.1,3.0,4.6,1.4,Iris-versicolor5.8,2.6,4.0,1.2,Iris-versicolor5.0,2.3,3.3,1.0,Iris-versicolor5.6,2.7,4.2,1.3,Iris-versicolor5.7,3.0,4.2,1.2,Iris-versicolor5.7,2.9,4.2,1.3,Iris-versicolor6.2,2.9,4.3,1.3,Iris-versicolor5.1,2.5,3.0,1.1,Iris-versicolor5.7,2.8,4.1,1.3,Iris-versicolor
根据样本说明中对样本的总统计:
对四种属性进行进一步划分:
sepal-length4.3-5.84a5.84-7.9b
sepal-width2.0-3.05c3.05-4.4d
petal-length1.0-3.76e3.76-6.9f
petal-width0.1-1.20g1.20-2.5h
得到处理后的测试样例集为:
testsepal-lengthsepal-widthpetal-lengthpetal-widthclass
1adegIris-setosa
2acegIris-setosa
3adegIris-setosa
4adegIris-setosa
5adegIris-setosa
6adegIris-setosa
7adegIris-setosa
8adegIris-setosa
9acegIris-setosa
10adegIris-setosa
11adegIris-setosa
12adegIris-setosa
13acegIris-setosa
14acegIris-setosa
15adegIris-setosa
16adegIris-setosa
17adegIris-setosa
18adegIris-setosa
19adegIris-setosa
20adegIris-setosa
21adegIris-setosa
22adegIris-setosa
23adegIris-setosa
24adegIris-setosa
25adegIris-setosa
26acegIris-setosa
27adegIris-setosa
28adegIris-setosa
29adegIris-setosa
30adegIris-setosa
31adegIris-setosa
32adegIris-setosa
33adegIris-setosa
34adegIris-setosa
35adegIris-setosa
36adegIris-setosa
37adegIris-setosa
38adegIris-setosa
39acegIris-setosa
40adegIris-setosa
41adegIris-setosa
42acegIris-setosa
43adegIris-setosa
44adegIris-setosa
45adegIris-setosa
46acegIris-setosa
47adegIris-setosa
48adegIris-setosa
49adegIris-setosa
50adegIris-setosa
51bdfhIris-versicolor
52bdfhIris-versicolor
53bdfhIris-versicolor
54acfhIris-versicolor
55bcfhIris-versicolor
56acfhIris-versicolor
57bdfhIris-versicolor
58acegIris-versicolor
59bcfhIris-versicolor
60acfhIris-versicolor
61acegIris-versicolor
62bcfhIris-versicolor
63bcfgIris-versicolor
64bcfhIris-versicolor
65acehIris-versicolor
66bdfhIris-versicolor
67acfhIris-versicolor
68acfgIris-versicolor
69bcfhIris-versicolor
70acfgIris-versicolor
71bdfhIris-versicolor
72bcfhIris-versicolor
73bcfhIris-versicolor
74bcfgIris-versicolor
75bcfhIris-versicolor
76bcfhIris-versicolor
77bcfhIris-versicolor
78bcfhIris-versicolor
79bcfhIris-versicolor
80acegIris-versicolor
81acfgIris-versicolor
82acegIris-versicolor
83acfgIris-versicolor
84bcfhIris-versicolor
85acfhIris-versicolor
86bdfhIris-versicolor
87bdfhIris-versicolor
88bcfhIris-versicolor
89acfhIris-versicolor
90acfhIris-versicolor
91acfgIris-versicolor
92bcfhIris-versicolor
93acfgIris-versicolor
94acegIris-versicolor
95acfhIris-versicolor
96acfgIris-versicolor
97acfhIris-versicolor
98bcfhIris-versicolor
99acegIris-versicolor
100acfhIris-versicolor
End
四、实验及其分析
1.总时间
(1).抽取不同规模的样例进行测试,比较决策树构造时间
随机抽取10组样例进行测试,运行结果如图2.6,总时间为0.05s
图110组样例构建决策树
随机抽取40组样例进行测试,运行结果如图2.6,总时间为0.167s
图240组样例构建决策树
随机抽取70组样例进行测试,运行结果如图2.6,总时间为0.369s
图370组样例构建决策树
选取100组样例进行测试,运行结果如图2.6,总时间为0.646s
图4100组样例构建决策树
得到样例数—时间表:
样例个数
10
40
70
100
运行时间(s)
0.05
0.167
0.369
0.646
表1.样例数—时间表
画出样例数—时间折线图:
图4样例数—时间折线图
由图4可以看出,本文的决策树分类算法的运行时间与样例数成正比关系。
2.分类准确性
我们知道样本数越多对总体的估计就越准确,即对IrisPlants的种类的预估就越准确,所以我们只对100样例数时的运行结果进行分类准确性测试。
图5100组样例构建决策树
可以用图形表示为:
图6决策树
随机抽取10组样例集合{7,13,26,37,48,55,62,71,89,94}进行带入测试,{√,√,√,√,√,√,√,√,√,×}得到准确率为90%;
随机抽取10组样例集合{2,14,27,39,41,52,65,78,82,90}进行带入测试,{√,√,√,√,√,√,√,√,×,√}得到准确率为90%;
随机抽取10组样例集合{1,12,29,32,45,59,67,74,85,97}进行带入测试,{√,√,√,√,√,√,√,√,×,√}得到准确率为100%;
综上,可以估计平均准确率约为93.3%。
五、结论及不足
结论:
1.本文实现的决策树分类算法的运行时间与样例数成正比关系。
2.用本算法进行IrisPlants预估的平均准确率约为93.3%。
不足:
1.强行取平均值进行划分的方法略显僵硬。
(我觉得还是可以...)
2.只实现了两种IrisPlants的预估,Iris-virginica的样本没有用到。
(详细代码在附录中)
附录
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
#defineMAXLEN6//输?
入?
每?
行D的?
数簓据Y个?
数簓
//多à叉?
树骸?
的?
实害?
现?
//1广?
义?
表括?
//2父?
指?
针?
表括?
示?
法ぁ?
,?
适酣?
于?
经-常£找ò父?
结á点?
的?
应畖用?
//3子哩?
女?
链ⅰ?
表括?
示?
法ぁ?
,?
适酣?
于?
经-常£找ò子哩?
结á点?
的?
应畖用?
//4左哩?
长¤子哩?
,?
右?
兄?
弟台?
表括?
示?
法ぁ?
实害?
现?
比括?
较?
麻é烦?
//5每?
个?
结á点?
的?
所ù有瓺孩¢子哩?
用?
vector保馈?
存?
//教ì训μ:
数簓据Y结á构1的?
设Θ?
计?
很ü重?
要癮,?
本?
算?
法ぁ?
采é用?
5比括?
较?
合?
适酣?
,?
同?
时骸?
//注痢?
意癮维?
护¤剩骸?
余?
样ù例和í剩骸?
余?
属?
性?
信?
息¢,?
建¨树骸?
时骸?
横á向ò遍括?
历え?
考?
循-环·属?
性?
的?
值μ,?
//纵罽向ò遍括?
历え?
靠?
递蘗归é调獭?
用?
vector>state;//实害?
例集ˉ
vectoritem(MAXLEN);//对?
应畖一?
行D实害?
例集ˉ
vectorattribute_row;//保馈?
存?
首骸?
行D即′属?
性?
行D数簓据Y
stringend("end");//输?
入?
结á束?
stringIrissetosa("Iris-setosa");
stringIrisversicolor("Iris-versicolor");
stringIrisvirginica("Iris-virginica");
stringblank("");
map>map_attribute_values;//存?
储洹?
属?
性?
对?
应畖的?
所ù有瓺的?
值μ
inttree_size=0;
structNode{//决?
策?
树骸?
节ú点?
stringattribute;//属?
性?
值μ
stringarrived_value;//到?
达?
的?
属?
性?
值μ
vectorchilds;//所ù有瓺的?
孩¢子哩?
Node(){
attribute=blank;
arrived_value=blank;
}
};
Node*root;
//根ù据Y数簓据Y实害?
例计?
算?
属?
性?
与?
值μ组哩?
成é的?
map
voidComputeMapFrom2DVector(){
unsignedinti,j,k;
boolexited=false;
vectorvalues;
for(i=1;i照?
列遍括?
历え?
for(j=1;jfor(k=0;kif(!
values[k].compare(state[j][i]))exited=true;
}
if(!
exited){
values.push_back(state[j][i]);//注痢?
意癮Vector的?
插?
入?
都?
是?
从洙?
前°面?
插?
入?
的?
,?
注痢?
意癮更ü新?
it,?
始?
终?
指?
向òvector头?
}
exited=false;
}
map_attribute_values[state[0][i]]=values;
values.erase(values.begin(),values.end());
}
}
//根ù据Y具?
体?
属?
性?
和í值μ来ぁ?
计?
算?
熵?
doubleComputeEntropy(vector>remain_state,stringattribute,stringvalue,boolifparent){
vectorcount(2,0);
unsignedinti,j;
booldone_flag=false;//哨Θ?
兵?
值μ
for(j=1;jif(done_flag)break;
if(!
attribute_row[j].compare(attribute)){
for(i=1;iif((!
ifparent&&!
remain_state[i][j].co