判别分析的MATLAB实现案例.doc_第1页
判别分析的MATLAB实现案例.doc_第2页
判别分析的MATLAB实现案例.doc_第3页
判别分析的MATLAB实现案例.doc_第4页
判别分析的MATLAB实现案例.doc_第5页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

%-% 读取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和误判概率errC,err = classify(sample,training,group,mahalanobis);obs, C % 查看判别结果err % 查看误判概率%-% 加载fisheriris.mat中数据,进行贝叶斯判别%-%*加载数据*load fisheriris % 把文件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.73 5.63.13.81.8 6.12.54.71.1 6.12.65.71.9 5.13.16.50.62 5.83.73.90.13 5.72.71.10.12 6.43.22.41.6 6.731.91.1 6.83.57.91 ;% 利用所创建的朴素贝叶斯分类器对象对未判样品进行判别,返回判别结果pre1,pre1也是字符串元胞向量pre1 = ObjBayes.predict(x)%-% 加载fisheriris.mat中数据,进行Fisher判别%-%*加载数据*load fisheriris % 把文件fisheriris.mat中数据导入MATLAB工作空间%*待判样品*% 定义待判样品观测值矩阵xx = 5.82.71.80.73 5.63.13.81.8 6.12.54.71.1 6.12.65.71.9 5.13.16.50.62 5.83.73.90.13 5.72.71.10.12 6.43.22.41.6 6.731.91.1 6.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类的判别式得分的散点图hold onplot(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 1.8636% versicolor 0.9892 1.6081% virginica 1.9852 1.9443% class, TabCan, TabL, TabCon, TabM, TabG, trainscore = fisher(.)返回% 训练样品所对应的判别式得分trainscore. trainscore的第一列为各训练样品原本所% 属类的类序号,第i+1列为第i个判别式得分.% Copyright 2009 xiezhh.% $Revision: 1.0.0.0 $ $Date: 2009/10/03 10:40:34 $if nargin 0);nusedgroups = length(nonemptygroups);% 判断是否有空的组if ngroups nusedgroups warning(警告: 有空的组.);endn,d = size(training);if size(gindex,1) = n error(错误: 输入参数大小不匹配,GROUP与TRAINING必须具有相同的行数.);elseif isempty(sampledata) sampledata = zeros(0,d,class(sampledata);elseif size(sampledata,2) = d error(错误: 输入参数大小不匹配,SAMPLEDATA与TRAINING必须具有相同的列数.);end% 设置contri的默认值为1,并限定contri在(0, 1内取值if nargin 1 | contri = 0 error(错误: contri 必须是一个在(0, 1内取值的标量.);endif any(gsize = 1) error(错误: TRAINING中的每个组至少应有两个观测.);end% 计算各组的组均值gmeans = NaN(ngroups, d);for k = nonemptygroups gmeans(k,:) = mean(training(gindex=k,:),1);end% 计算总均值totalmean = mean(training,1);% 计算组内离差平方和矩阵E和组间离差平方和矩阵BE = zeros(d);B = E;for k = nonemptygroups % 分别估计各组的组内离差平方和矩阵. Q,Rk = qr(bsxfun(minus,training(gindex=k,:),gmeans(k,:), 0); % 各组的组内离差平方和矩阵:AkHat = Rk*Rk % 判断各组的组内离差平方和矩阵的正定性 s = svd(Rk); if any(s = contri);CumContGeCon = CumContGeCon(1);V = V(:, 1:CumContGeCon); %需要使用的判别式系数矩阵% 以表格形式返回所用判别式的系数向量,若contri取值为1,% 则返回所有判别式的系数向量. TabCan是一个元胞数组TabCan = cell(d+1, CumContGeCon+1);TabCan(1, 1) = Variable;TabCan(2:end, 1) = strcat(x,cellstr(num2str(1:d);TabCan(1, 2:end) = strcat(can,cellstr(num2str(1:CumContGeCon);TabCan(2:end, 2:end) = num2cell(V);% 将训练样品与待判样品放在一起进行判别m = size(sampledata,1);gv = gmeans*V;stv = sampledata; training*V;nstv = size(stv, 1);message = ;outclass = NaN(nstv, 1);for i = 1:nstv obji = bsxfun(minus,stv(i,:),gv); obji = sum(obji.2, 2); idclass = find(obji = min(obji); if length(idclass) 1 idclass = idclass(1); message = 警告: 出现了一个或多个结; end outclass(i) = idclass;endwarning(message);trclass = outclass(m+(1:n); %训练样品的判别结果(由类序号构成的向量)outclass = outclass(1:m); %待判样品的判别结果(由类序号构成的向量)outclass = gleve

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论