决策树---MATLAB程序Word格式文档下载.docx

上传人:b****0 文档编号:12929643 上传时间:2022-09-30 格式:DOCX 页数:4 大小:385.49KB
下载 相关 举报
决策树---MATLAB程序Word格式文档下载.docx_第1页
第1页 / 共4页
决策树---MATLAB程序Word格式文档下载.docx_第2页
第2页 / 共4页
决策树---MATLAB程序Word格式文档下载.docx_第3页
第3页 / 共4页
决策树---MATLAB程序Word格式文档下载.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

决策树---MATLAB程序Word格式文档下载.docx

《决策树---MATLAB程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《决策树---MATLAB程序Word格式文档下载.docx(4页珍藏版)》请在冰豆网上搜索。

决策树---MATLAB程序Word格式文档下载.docx

⽣成的决策树可能对训练数据有很好的分类能⼒,但对未知的测试数据却未必有很好的分类能⼒,即可能发⽣过拟合现象。

需要对已

⽣成的树⾃上⽽下进⾏剪枝,将树变得更简单,从⽽使它具有更好的泛化能⼒。

具体地,就是去掉过于细分的叶结点,使其回退到⽗结点,甚⾄更⾼的结点,然后将⽗结点或更⾼的结点改为新的叶结点。

汽车特征评估质量

本次使⽤的是下载的⼀个包含汽车多个细节的数据集,包括车门数量、后备箱⼤⼩、维修成本、安全性能、载⼈数量等等,来确定⼀辆汽车的质量。

分类的⽬的是把车辆的质量分为4种类型:

不达标、达标、良好、优秀。

数据集的形式如图1所⽰,其中的每个值都可以看作成字符串。

本次考虑数据集中的6个属性,其取值范围是这样的:

购买价位:

取值范围是vhigh、high、med、low,分别代表很⾼、⾼、中等、低;

维修成本:

车门数量:

取值范围是2、3、4、5、5more等;

载客数量:

取值范围是2、4、more等;

动⼒性能:

取值范围是small、med、big,分别代表⼩、中、⼤;

安全性能:

取值范围是low、med、high,分别代表低、中、⾼

分类的结果,即汽车的质量取值范围是unacc、acc、good、vgood,分别代表不达标、达标、良好、优秀。

考虑到每⼀⾏都具有字符串属性,需要假设所有的特征均是字符串,并在次基础上建⽴分类器。

⾸先将数据集当中的所有字符串变为数字,⽅便后⾯的分类,由于下载的数据集为.data格式,matlab⽆法直接读取,已经转化为.xlsx格式,并且将vhigh、high、med、low分别替换为4、3、2、1,将small、med、big替换为1、2、3,将low、med、high替换为

1、2、3,将unacc、acc、good、vgood替换为1、2、3、4。

数据中共有1728组,随机从中取出1500组作为训练集,剩下的228组作为测试集。

使⽤训练集建⽴决策树,然后使⽤模型进⾏预测。

别根据决策树的结果计算出决策树中对车辆各种情况预测的正确率以及全部测试集预测的准确率。

然后对决策树进⾏修剪,对⽐起重采样误差以及交叉验证误差。

clearall;

clc;

closeall;

%%导⼊数据

loadcar;

a=randperm(1728);

%训练集

Train_Data=data(a(p>

Train_Label=data(a(p>

%测试集

Test_Data=data(a(1501:

1728),1:

6);

Test_Label=data(a(1501:

1728),7);

%%创建决策树分类器

Tree=ClassificationTree.fit(Train_Data,Train_Label);

%%查看决策树视图

view(Tree);

view(Tree,'

mode'

'

graph'

);

%%预测分类

Tree_pre=predict(Tree,Test_Data);

%%结果分析

count_train_1=length(find(Train_Label==1));

%训练集中车辆质量不达标个数count_train_2=length(find(Train_Label==2));

%训练集中车辆质量达标个数count_train_3=length(find(Train_Label==3));

%训练集中车辆质量良好个数count_train_4=length(find(Train_Label==4));

%训练集中车辆质量优秀个数

rate_train_1=count_train_1/1500;

rate_train_2=count_train_2/1500;

rate_train_3=count_train_3/1500;

rate_train_4=count_train_4/1500;

训练%集中车辆质量不达标占的⽐例训练%集中车辆质量达标占的⽐例训练%集中车辆质量优良占的⽐例训练%集中车辆质量优秀占的⽐例

total_1=length(find(data(:

7)==1));

%总数据中车辆质量不达标个数total_2=length(find(data(:

7)==2));

%总数据中车辆质量达标个数total_3=length(find(data(:

7)==3));

%总数据中车辆质量优良个数total_4=length(find(data(:

7)==4));

%总数据中车辆质量优秀个数

count_test_1=length(find(Test_Label==1));

%测试集中车辆质量不达标个数count_test_2=length(find(Test_Label==2));

%测试集中车辆质量达标个数count_test_3=length(find(Test_Label==3));

%测试集中车辆质量良好个数count_test_4=length(find(Test_Label==4));

%测试集中车辆质量优秀个数

count_right_1=length(find(Tree_pre==1&

Test_Label==1));

count_right_2=length(find(Tree_pre==2&

Test_Label==2));

count_right_3=length(find(Tree_pre==3&

Test_Label==3));

count_right_4=length(find(Tree_pre==4&

Test_Label==4));

测%试集中预测车辆质量不达标正确的个数测%试集中预测车辆质量达标正确的个数测%试集中预测车辆质量优良正确的个数测%试集中预测车辆质量优秀正确的个数

rate_right=(count_right_1+count_right_2+count_right_3+count_right_4)/228;

%%显⽰部分结果

disp(['

车辆总数:

1728'

...

不'

达标:

'

num2str(total_1)...达'

标:

num2str(total_2)...优'

良:

num2str(total_3)...优'

秀:

num2str(total_4)]);

训练集车辆数:

1500'

num2str(count_train_1)...达'

num2str(count_train_2)...优'

num2str(count_train_3)...优'

num2str(count_train_4)]);

测试集车辆数:

228'

num2str(count_test_1)...

num2str(count_test_1)...达'

num2str(count_test_2)...优'

num2str(count_test_3)...优'

num2str(count_test_4)]);

决策树判断结果:

达标正确率:

sprintf('

%2.2f%%'

count_right_1/count_test_1*100)...达'

标正确率:

count_right_2/count_test_2*100)...优'

良正确率:

count_right_3/count_test_3*100)...优'

秀正确率:

count_right_4/count_test_4*100)]);

总正确率:

sprintf('

rate_right*100)]);

%%优化前决策树的重采样误差和交叉验证误差resubDefault=resubLoss(Tree);

lossDefault=kfoldLoss(crossval(Tree));

disp(['

剪枝前决策树的重采样误差:

num2str(resubDefault)]);

剪枝前决策树的交叉验证误差:

...num2str(lossDefault)]);

%%剪枝

[~,~,~,bestlevel]=cvLoss(Tree,'

subtrees'

all'

treesize'

min'

cptree=prune(Tree,'

Level'

bestlevel);

view(cptree,'

%%剪枝后决策树的重采样误差和交叉验证误差

resubPrune=resubLoss(cptree);

lossPrune=kfoldLoss(crossval(cptree));

剪枝后决策树的重采样误差:

...num2str(resubPrune)]);

剪枝后决策树的交叉验证误差:

结果

车辆总数:

1728不达标:

1210达标:

384优良:

69优秀:

65

训练集车辆数:

1500不达标:

1046达标:

338优良:

56优秀:

60测试集车辆数:

228不达标:

164达标:

46优良:

13优秀:

5

决策树判断结果:

不达标正确率:

97.56%达标正确率:

95.65%优良正确率:

84.62%优秀正确率:

100.00%总正确率:

96.49%

剪枝前决策树的重采样误差:

0.026

0.048667剪枝后决策树的重采样误差:

0.026667剪枝后决策树的交叉验证误差:

0.0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1