判别分析的MATLAB实现案例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%--------------------------------------------------------------------------
% 读取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中数据,进行贝叶斯判别
%--------------------------------------------------------------------------
%********************************加载数据*********************************** load fisheriris % 把文件fisheriris.mat中数据导入MA TLAB工作空间
%**********************************查看数据********************************* head0 = {'Obj', 'x1', 'x2', 'x3', 'x4', 'Class'}; % 设置表头
[head0; num2cell([[1:150]', meas]), species] % 以元胞数组形式查看数据
%*********************************贝叶斯判别********************************
% 用meas和species作为训练样本,创建一个朴素贝叶斯分类器对象ObjBayes
ObjBayes = 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生成一个索引向量gindex1
gindex2 = grp2idx(species); % 根据分组变量species生成一个索引向量gindex2
errid = find(gindex1 ~= gindex2) % 通过对比两个索引向量,返回误判样品的观测序号向量
% 查看误判样品的误判情况
head1 = {'Obj', 'From', 'To'}; % 设置表头
% 用num2cell函数将误判样品的观测序号向量errid转为元胞向量,然后以元胞数组形式查看误判结果
[head1; num2cell(errid), species(errid), pre0(errid)]
% 对未知类别样品进行判别
% 定义未判样品观测值矩阵x
x = [5.8 2.7 1.8 0.73
5.6 3.1 3.8 1.8
6.1 2.5 4.7 1.1
6.1 2.6 5.7 1.9
5.1 3.1
6.5 0.62
5.8 3.7 3.9 0.13
5.7 2.7 1.1 0.12
6.4 3.2 2.4 1.6
6.7 3 1.9 1.1
6.8 3.5
7.9 1
];
% 利用所创建的朴素贝叶斯分类器对象对未判样品进行判别,返回判别结果pre1,pre1也是字符串元胞向量
pre1 = ObjBayes.predict(x)
%--------------------------------------------------------------------------
% 加载fisheriris.mat中数据,进行Fisher判别
%--------------------------------------------------------------------------
%********************************加载数据*********************************** load fisheriris % 把文件fisheriris.mat中数据导入MA TLAB工作空间
%**********************************待判样品********************************* % 定义待判样品观测值矩阵x
x = [5.8 2.7 1.8 0.73
5.6 3.1 3.8 1.8