机器学习之辣鸡使用matlab(二)决策树

决策树

实现ID3决策树,并在鸢尾花卉Iris数据集上进行5折交叉验证。并观测训练所得到的决策树在训练集和测试集的准确率,从而判断该决策树是否存在过拟合。在此基础上实现预剪枝和后剪枝,并比较预剪枝树与后剪枝树在训练集和测试集上的准确率。

(我刚搞了一下,在这没办法上传我的iris.data数据集快哭了有需要的网上下载一个就好啦~网上搜索就有)

实现过程:

首先使用importdata将.data文件导入到Matlab的workspace中,然后用regexp函数将A分割成单独的一个个值并保存到S中。再用str2num函数把字符串转换为数值并保存到矩阵a中。为了方便起见,把三类鸢尾花的名字在矩阵中存储时替换为1,2,3。为了后面计算信息熵时使用,自定义函数“count”来统计每个属性中每一类的个数,一共三类,其数量分别保存在变量cout1,count2,count3中。

function [ count ] = classcount( a )
%统计每个属性中每一类的个数,一共三类
count1=0;
count2=0;
count3=0;
[m,n]=size(a);
for i=1:m
    if a(i,n)==1
        count1=count1+1;
    else
        if a(i,n)==2
            count2=count2+1;
        else
            count3=count3+1;
        end
    end
end
count=[count1,count2,count3];
end

自定义函数“ID3”用来计算将样本划分出的每组的信息熵,并返回结果I。其中用到了公式Ent(D)=-∑pk*log(pk),Ent的值越小,样本集合D的纯度越高。

function [ I ] = ID3( data )
%计算划分出来的每组数据的信息熵
count=classcount(data);
[m,n]=size(data);
p=count./m;
I=0;
for i=1:3
    if p(1,i)>0
         I=-p(1,i)*log(p(1,i))+I;
    end
end
end

自定义函数“split”按维度dim(属性,4个属性共4维)和节点point进行划分,分为二叉sub1、sub2。利用二叉树来处理后续问题。

function [ sub1,sub2 ] = split(data ,dim,point)
%按属性dim和划分点point进行划分
sub1=[ ];
sub2=[ ];
[m,n]=size(data);
for i=1:m
    if(data(i,dim)<=point)
        sub1=[sub1;data(i,1:dim-1),data(i,dim+1:n)];
         %sub1=[sub1;data(i,:)];
    else
        sub2=[sub2;data(i,1:dim-1),data(i,dim+1:n)];
        %sub2=[sub2;data(i,:)];
end

end
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值