您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 用决策树方法对手写数字的识别
决策树的matlab实现(运用在手写数字的0,1识别)[1]单个决策树的实现。一、载入实验数据%载入实验的原始数据images=loadMNISTImages('train-images.idx3-ubyte');labels=loadMNISTLabels('train-labels.idx1-ubyte');images_0=images(:,labels==0);images_1=images(:,labels==1);Images_te=loadMNISTImages('t10k-images.idx3-ubyte');Labels_te=loadMNISTLabels('t10k-labels.idx1-ubyte');Images_te_0=Images_te(:,Labels_te==0);Images_te_1=Images_te(:,Labels_te==1);%对原始数据进行处理X=[images_0images_1]';%将0和1的训练样本拼接成新的矩阵。注意此时时是每一行代表一个样本。Y=[zeros(5923,1)ones(6724,1)];%生成训练样本相应的类别标签,是一个列向量。每一个元素代表相应样本所属于的类别。Images_te_0=Images_te_0';%测试样本的数字0,每一行代表一个样本。Images_te_1=Images_te_1';%测试样本的数字1,每一行代表一个样本.二、构建决策树t=treefit(X,Y);%X是训练样本,一定注意是每一行代表一个样本数据。Y是训练样本%所对应的类别标签,仍旧是一个列向量。t就是根据训练样本构建的一个决策树。三、用决策树对测试样本进行分类result0=treeval(t,Images_te_0');%对测试样本手写数字0进行识别。result0为一个列向量,每一元素表示对应样本被识别为的类。%treeval函数的格式为treeval(t,X),其中,t为构建的决策树,X为测试样本。一定要注意X的每一行表示的是一个样本。result1=treeval(t,Images_te_1');%对测试样本数字1进行分类。四、错误率分析error0=find(result~=0);error1=find(result~=1);%找出被识别错误的数字0和1的索引。rate0=size(error0,1)/980;rate1=size(error1,1)/980;%分别计算错误率。实验结果为rate1=0.007048458149780rate0=0.004081632653061可以看到正确几乎接近100%五、显示决策树treedisp(t);或者是view(t);如下:六、对决策树进行剪枝在对决策树进行剪枝之前,我们需要计算交叉验证的最小错误率水平。具体过程为:我们计算不同k值下的k-foldcv,找出错误率最小的那个k值。在matlab上的实现是用我自己编写的trcv函数做的。如下:k=trcv(10,X',Y);找到了k,我们就按照这个k值来对我们建立的决策树进行剪枝。用函数prune实现。如下:tree_new=prune(t,'level',k);实现结果为:k=4;view(tree_new)的结果如下我们发现经过剪枝,决策树变得简单许多。下面我们可以用这棵新树对测试样本进行测试。在此就不再做了。[2]用随机森林来实现我自己编写了一个随机遇森林函数rf,用它可以直接实现。实现过程如下:labels0_te=zeros(980,1);%载入测试样本的标签[w,err]=rf(X',Y,Images_te_0,labels0_te,5);最后的错误率为err=0.001.比之前0.004提高很多。我们find(w~=0);发现只有一个样本被识别错误而已。
本文标题:用决策树方法对手写数字的识别
链接地址:https://www.777doc.com/doc-4690598 .html