概述
决策树
- 前言
- 一、实验目的
- 二、实验内容
- 1、导入数据
- 2、将数据分为训练集与测试集
- 3、采用训练集建立决策树
- 三、实验结果
- 1、Cart算法绘制决策树
- 后记
前言
五一假期跳过了一次实验课,结果这周五上实验课老师竟然直接跳过了决策树的实验,虽然说我也不能算是白写了,毕竟算是锻炼自己,不过总还是有点难受的~哼。
恕我懒得再去调整格式了,下面的内容直接是实验报告的原封内容。
一、实验目的
编程实现两种决策树算法,即ID3算法(以信息增益为特征)和Cart算法(以基尼指数为特征),使用Matlab自带函数。
二、实验内容
1、导入数据
数据我使用了matlab自带的iris数据集(今后的大部分数据也将来源于此),使用语句:load fisherirish;
即可得到meas和species两个数据,分别是属性和标签。
2、将数据分为训练集与测试集
我们使用上一次实验内容中实现的p次k折交叉验证函数来划分训练集与测试集,但是在调用函数之前,我们需要先把属性与标签合并为一个矩阵。
由于只能将同类别数据合并在同一个矩阵中,因此我们需要把species中的标签值按类别修改为1、2、3,得到下面这样的types矩阵:
我写了一个函数来完成这个操作,实际上你可以更简单点,直接1:50,50:100,100:150分别为1、2、3即可
function [types]=tag2num(data1)
%将种类名标签,转换为数字,方便与属性合并后传入k折函数
types=[];
data1=categorical(data1); % 先将cell转换为categorical数组
species=unique(data1); % 取出类别
for i=1:length(data1)
for j=1:length(species)
if data1(i)==species(j)
types(end+1)=j; % 按照类别给样本标号
end
end
end
types=types'; % 转置
然后,我们就可以将types和meas合并为iris矩阵,并且调用k折交叉验证函数了:
iris=[meas,types]; %把属性与标签合并
[Train_kcross,Test_kcross]=kcrossvalidation(iris); %k折分组
3、采用训练集建立决策树
由于新版matlab中没有了依据ID3算法构建决策树的函数,因此我们只用Cart算法的决策树函数fitctree实现。
我们从2中通过k折交叉验证得到的Train和Test集合中分别选取一组作为我们建立决策树用的训练集合测试集:
Train_x=Train_kcross(:,1:4,1,1); % 将第一组训练样本拆开
Train_y=Train_kcross(:,5,1,1); % x是属性组,y是标记值
Train_y_tag=num2tag(Train_y); % 把标签值改为标签名,方便作图结果
Test_x=Test_kcross(:,1:4,1,1); % 将第一组测试样本拆开
Test_y=Test_kcross(:,5,1,1); % x是属性组,y是标记值
Test_y_tag=num2tag(Test_y); % 把标签值改为标签名,方便作图结果
其中,num2tag是一个可选操作,我只是为了让画出来的决策树更为直观而已,函数定义如下:
function [y_tag]=num2tag(num_array)
% 该函数的作用是将标记值转回标记名,用以作图
y_tag={};
for i=1:length(num_array)
if num_array(i)==1
y_tag{end+1}='setosa';
end
if num_array(i)==2
y_tag{end+1}='versicolor';
end
if num_array(i)==3
y_tag{end+1}='virginica';
end
end
y_tag=y_tag';
然后将Train_x和Train_y作为构建参数传入fictree函数,构建决策树:
tree=fitctree(Train_x,Train_y_tag,'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'});
view(tree,'Mode','Graph'); %生成决策树并绘制
三、实验结果
1、Cart算法绘制决策树
后记
实际上根据其他班同学发给我的实验内容来看,还应该有id3算法完成决策树构建的内容,虽然matlab自带函数不再提供,但是我也参照一些博客写了一系列可以实现该功能的函数。另外还有一个有关剪枝的实验内容,然而matlab的prune方法单纯只是减去某一层的结点,与我们想要的预剪枝、后剪枝效果不太一样,我也没有做,算了,懒得做了诶
最后
以上就是无限玫瑰为你收集整理的【学习机器学习】实验——决策树的全部内容,希望文章能够帮你解决【学习机器学习】实验——决策树所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复