使用matlab实现对winedataset的决策树(C4.5)构建及可视化

本文介绍了如何使用MATLAB R2019b实现C4.5决策树算法,对葡萄酒数据集进行二分类,并通过10折交叉验证评估性能。数据预处理包括随机抽样和10折交叉验证,决策树构造过程中涉及信息增益率和剪枝策略,最后讨论了决策树的可视化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

goal:

实现一个决策树分类器。 分类器的性能将通过对提供的数据集进行10倍(10-fold)交叉验证来评估。 决策树和交叉验证在课程中进行了介绍。

environment

MATLAB R2019b

dataset

本次实验使用的数据集是一个葡萄酒数据集,该文件是一个逗号分隔文件(csv),该数据集通常用于评估分类算法,其中分类任务是确定葡萄酒质量是否超过7。
我们将葡萄酒质量得分映射到0和1的二元类。从0到6(含)的葡萄酒得分被映射为0,葡萄酒得分为7及以上映射到1。我们要做的是数据集执行二进制分类。
每行用12列描述一种葡萄酒:前11列描述该葡萄酒的特征(详细信息),最后一栏是葡萄酒的质量(0/1)。
1 - fixed acidity
2 - volatile acidity
3 - citric acid
4 - residual sugar
5 - chlorides
6 - free sulfur dioxide
7 - total sulfur dioxide
8 - density
9 - pH
10 - sulphates
11 - alcohol
Output variable (based on sensory data):
12 - quality (score between 0 and 10)
在这里插入图片描述
数据集获取地址:
http://archive.ics.uci.edu/ml/datasets/Wine+Quality
(顺便推荐一下这个网址,这是加利福尼亚大学的实验室数据集网站,里面也有很多其他非常优质的数据集)
(当然,如果下不下来可以评论里私聊~~)

C4.5

这里采用C4.5的方式来实现
(1) C4.5算法是决策树分类领域的一种较为经典的算法,下图展示了算法的流程:
在这里插入图片描述(2)与ID3相比主要的改进:用信息增益率来选择属性。ID3选择属性用的是子树的信息增益,这里可以用很多方法来定义信息,ID3使用的是熵(entropy, 熵是一种不纯度度量准则),也就是熵的变化值,而C4.5用的是信息增益率。
信息增益和信息增益比,这里不再展开,网络上有很多优秀的博主来对此进行介绍
在决策树构造过程中进行剪枝,因为某些具有很少元素的结点可能会使构造的决策树过拟合(Overfitting),如果不考虑这些结点可能会更好。

(3)实现:
 数据预处理:
一种的随机抽取训练集和测试集的方式:

%随机采样的方法来分开训练样本和测试样本,并分开前11个属性值和第12列的label:
winedata=csvread('ex6Data.csv',1,0,[1,0,20,11])
train_index=randperm(length(winedata),floor(length(winedata)/4*3));
traindata=winedata(train_index,:);
train_features=traindata(:,1:(size(traindata,2))-1)
train_targets=traindata(:,12)'

另一种是10折的交叉验证的方式
使用这种方法,我们将数据集随机分成10份,使用其中9份进行训练而将另外1份用作测试。该过程可以重复10次,每次使用的测试数据不同。
在这里插入图片描述(1)每一次迭代中留存其中一个桶。第一次迭代中留存桶1,第二次留存桶2,其余依此类推。
(2)用其他9个桶的信息训练分类器(第一次迭代中利用从桶2到桶10的信息训练分类器)。
(3)利用留存的数据来测试分类器并保存测试结果。
交叉验证实现:在每次循环中,去400i-400(i+1)部分行的数据集作为测试集,其他部分的数据集作为训练集。

    testdata=csvread('ex6Data.csv',400*(i-1)+1,0,[400*(i-1)+1,0,400*i,11]);
    if i==1
        traindata=csvread('ex6Data.csv',401,0,[401</
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值