您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 判别分析的MATLAB实现案例
%--------------------------------------------------------------------------%读取examp10_01.xls中数据,进行距离判别%--------------------------------------------------------------------------%********************************读取数据***********************************%读取文件examp10_01.xls的第1个工作表中C2:F51范围的数据,即全部样本数据,包括未判企业sample=xlsread('examp10_01.xls','','C2:F51');%读取文件examp10_01.xls的第1个工作表中C2:F47范围的数据,即已知组别的样本数据,training=xlsread('examp10_01.xls','','C2:F47');%读取文件examp10_01.xls的第1个工作表中B2:B47范围的数据,即样本的分组信息数据,group=xlsread('examp10_01.xls','','B2:B47');obs=[1:50]';%企业的编号%**********************************距离判别*********************************%距离判别,判别函数类型为mahalanobis,返回判别结果向量C和误判概率err[C,err]=classify(sample,training,group,'mahalanobis');[obs,C]%查看判别结果err%查看误判概率%--------------------------------------------------------------------------%加载fisheriris.mat中数据,进行贝叶斯判别%--------------------------------------------------------------------------%********************************加载数据***********************************loadfisheriris%把文件fisheriris.mat中数据导入MATLAB工作空间%**********************************查看数据*********************************head0={'Obj','x1','x2','x3','x4','Class'};%设置表头[head0;num2cell([[1:150]',meas]),species]%以元胞数组形式查看数据%*********************************贝叶斯判别********************************%用meas和species作为训练样本,创建一个朴素贝叶斯分类器对象ObjBayesObjBayes=NaiveBayes.fit(meas,species);%利用所创建的朴素贝叶斯分类器对象对训练样本进行判别,返回判别结果pre0,pre0也是字符串元胞向量pre0=ObjBayes.predict(meas);%利用confusionmat函数,并根据species和pre0创建混淆矩阵(包含总的分类信息的矩阵)[CLMat,order]=confusionmat(species,pre0);%以元胞数组形式查看混淆矩阵[[{'From/To'},order'];order,num2cell(CLMat)]%查看误判样品编号gindex1=grp2idx(pre0);%根据分组变量pre0生成一个索引向量gindex1gindex2=grp2idx(species);%根据分组变量species生成一个索引向量gindex2errid=find(gindex1~=gindex2)%通过对比两个索引向量,返回误判样品的观测序号向量%查看误判样品的误判情况head1={'Obj','From','To'};%设置表头%用num2cell函数将误判样品的观测序号向量errid转为元胞向量,然后以元胞数组形式查看误判结果[head1;num2cell(errid),species(errid),pre0(errid)]%对未知类别样品进行判别%定义未判样品观测值矩阵xx=[5.82.71.80.735.63.13.81.86.12.54.71.16.12.65.71.95.13.16.50.625.83.73.90.135.72.71.10.126.43.22.41.66.731.91.16.83.57.91];%利用所创建的朴素贝叶斯分类器对象对未判样品进行判别,返回判别结果pre1,pre1也是字符串元胞向量pre1=ObjBayes.predict(x)%--------------------------------------------------------------------------%加载fisheriris.mat中数据,进行Fisher判别%--------------------------------------------------------------------------%********************************加载数据***********************************loadfisheriris%把文件fisheriris.mat中数据导入MATLAB工作空间%**********************************待判样品*********************************%定义待判样品观测值矩阵xx=[5.82.71.80.735.63.13.81.86.12.54.71.16.12.65.71.95.13.16.50.625.83.73.90.135.72.71.10.126.43.22.41.66.731.91.16.83.57.91];%*********************************Fisher判别********************************%利用fisher函数进行判别,返回各种结果(见fisher函数的注释)[outclass,TabCan,TabL,TabCon,TabM,TabG]=fisher(x,meas,species)%************************绘制两个判别式得分的散点图**************************%利用fisher函数进行判别,返回各种结果,其中ts为判别式得分[outclass,TabCan,TabL,TabCon,TabM,TabG,ts]=fisher(x,meas,species);%提取各类的判别式得分ts1=ts(ts(:,1)==1,:);%setosa类的判别式得分ts2=ts(ts(:,1)==2,:);%versicolor类的判别式得分ts3=ts(ts(:,1)==3,:);%virginica类的判别式得分plot(ts1(:,2),ts1(:,3),'ko')%setosa类的判别式得分的散点图holdonplot(ts2(:,2),ts2(:,3),'k*')%versicolor类的判别式得分的散点图plot(ts3(:,2),ts3(:,3),'kp')%virginica类的判别式得分的散点图legend('setosa类','versicolor类','virginica类');%加标注框xlabel('第一判别式得分');%给X轴加标签ylabel('第二判别式得分');%给Y轴加标签%************************只用一个判别式进行Fisher判别************************%令fisher函数的第4个输入为0.5,就可以只用一个判别式进行判别[outclass,TabCan,TabL,TabCon,TabM,TabG]=fisher(x,meas,species,0.5)function[outclass,TabCan,TabL,TabCon,TabM,TabG,trainscore]=fisher(sampledata,training,group,contri)%FISHER判别分析.%class=fisher(sampledata,training,group)根据训练样本training构造判别式,%利用所有判别式对待判样品sampledata进行判别.sampledata和training是具有相同%列数的矩阵,它们的每一行对应一个观测,每一列对应一个变量.group是training对%应的分组变量,它的每一个元素定义了training中相应观测所属的类.group可以是一%个分类变量,数值向量,字符串数组或字符串元胞数组.training和group必须具有相%同的行数.fisher函数把group中的NaN或空字符串作为缺失数据,从而忽略training%中相应的观测.class中的每个元素指定了sampledata中的相应观测所判归的类,它和%group具有相同的数据类型.%%class=fisher(sampledata,training,group,contri)根据累积贡献率不低于%contri,确定需要使用的判别式个数,默认情况下,使用所有判别式进行判别.contri%是一个在(0,1]区间内取值的标量,用来指定累积贡献率的下限.%%[class,TabCan]=fisher(...)以表格形式返回所用判别式的系数向量,若contri%取值为1,则返回所有判别式的系数向量.TabCan是一个元胞数组,形如%'Variable''can1''can2'%'x1'[-0.2087][0.0065]%'x2'[-0.3862][0.5866]%'x3'[0.5540][-0.2526]%'x4'[0.7074][0.7695]%[class,TabCan,TabL]=fisher(...)以表格形式返回所有特征值,贡献率,累积%贡献率等.TabL是一个元胞数组,形如%'Eigenvalue''Difference''Proportion''Cumulative'%[32.1919][31.9065][0.9912][0.9912]%[0.2854][][0.0088][1]%%[class,TabCan,TabL,TabCon]=fisher(...)以表格形式返回混淆矩阵(包含总%的分类信息的矩阵).TabCon是一个元胞数组,形如%'From/To''setosa''versicolor''virginica'%'setosa'[50][0][0]%'versicolor'[0][48][2]%'virginica'[0][1][49]%%[class,TabCan,TabL,TabCon,TabM]=fisher(...)以表格形式返回误判矩阵.%TabM是一个元胞数组,形如%'Obj''From''To'%[71]'versicolor''virginica'%[84]'versicolor''virginica'%[134]'virginica''versicolor'%%[class,TabCan,TabL,TabCon,TabM,TabG]=fisher(...)将所用判别式作用%在各组的组均值上,得到组均值投影矩阵,以表格形式返回这个矩阵.TabG是一个元胞%数组,形如%'Group''can1''can2'%'setosa'[-1.3849
本文标题:判别分析的MATLAB实现案例
链接地址:https://www.777doc.com/doc-5873822 .html