判别分析的MATLAB实现案例

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档