贝叶斯_fisher判别法
距离判别法和Bayes判别法
[color=black][size=3]距离判别法和Bayes判别法是判别分析中常用的两类判别法。多元统计书上一般都有介绍。简单说就是[font=MS Shell Dlg]判别给定的样本属于哪一类的。比方说一堆样本,分好几类,样本有n个属性。把这堆样本输入程序训练好后,程序就可以判别新的样本属于哪一类了。[/font]我把它们做成了一个简单的界面,大家可以按界面提示操作下。为了方便我准备了一些数据,见附件。[font=MS Shell Dlg]train是训练样本(判别准备前用的),test是测试样本,即新数据,用来判别新样本中每一个属于哪一类的。这里属性个数n=3。实际使用时,n可以不局限于3。训练样本只要按照附件中的格式(即第一列为类名,其余列为属性)存为xls文件即可。测试样本直接就是由属性列组成的,每一行表示一个样本。[/font][/size][/color]
[font=MS Shell Dlg][size=3]下面是代码(注释比较详细,用nested function写回调函数可以供GUI初学者借鉴):[/size][/font]
[font=MS Shell Dlg][size=3][code]
function DiscriminantMethods
fig=figure('defaultuicontrolunits','normalized','name','各类判别方法比较
','numbertitle','off','menubar','none');%主界面,返回主界面句柄fig
UiButtonGroupH = uibuttongroup('Position',[0.55 0.08 0.40 0.85],'title','各判别方法','fontsize',12,'bordertype','etchedout');%群组对象,并返回句柄
DistanceH = uicontrol('Style','Radio','String','距离判别法','fontsize',12,'pos',[0.05 0.73 0.9
0.15],'parent',UiButtonGroupH);%距离判别法的选项
BayesH = uicontrol('Style','Radio','String','Bayes判别法','fontsize',12,'pos',[0.05 0.52 0.9
0.15],'parent',UiButtonGroupH);%Bayes判别法的选项
FisherH = uicontrol('Style','Radio','String','Fisher判别法','fontsize',12,'pos',[0.05 0.31 0.9
0.15],'parent',UiButtonGroupH);%Fisher判别法的选项
%下面几行建立相关按钮控件。各菜单以及按钮点击时候的功能函数(回调函数写在下面) PrepareH=uicontrol(fig,'style','pushbutton','Pos',[0.15,0.68,0.2,0.08],'string','判别前准备','fontsize',12,'callback',@Prepare);
StartDiscriminantH=uicontrol(fig,'style','pushbutton','Pos',[0.15,0.38,0.2,0.08],'string','开始判别','fontsize',12,'callback',@StartDiscriminant); %================================================= %function:Prepare,判别前准备按钮的功能函数(回调函数)
%=================================================
function Prepare(hObject,eventdata)
[filename, pathname, flag] = uigetfile( '*.xls','当前选定的判别法的训练样本数据(*.xls)','*.xls');%弹出提示对话框
if ~flag
return;%flag为0,用户取消选择,返回;
end
[feature,class]=xlsread([pathname,filename]);%读入训练样本数据
Uclass=unique(class);%得出训练样本的类别信息(即分属于哪几类)
lUc=length(Uclass);%类别数目
Cfeature=cell(lUc,1);
for k=1:lUc
Cfeature{k}=feature(strcmp(class,Uclass{k}),:);%训练样本中每一类特征归到一起
end
WhichDisc=get(findobj(UiButtonGroupH,'style','radio','value',1),'string');%当前界面中选择的是哪种判别法
switch WhichDisc
case '距离判别法'
MeanCfeature=zeros(lUc,size(Cfeature{1},2));%用来存储每一类的各特征平均值
InvSigma=cell(lUc,1);%用来存储每一类的协方差矩阵的逆
for ii=1:lUc
MeanCfeature(ii,:)=mean(Cfeature{ii});%得到每一类的各特征平均值
InvSigma{ii}=inv(cov(Cfeature{ii}));%得到每一类的协方差矩阵的逆
end
SampleInfo.MeanCfeature=MeanCfeature;
SampleInfo.InvSigma=InvSigma;
SampleInfo.Uclass=Uclass;
setappdata(DistanceH,'SampleInfo',SampleInfo);
case 'Bayes判别法'
case 'Fisher判别法'
otherwise
end
h=msgbox('准备完毕,请点击开始判别进行测试~');%弹出对话框
uiwait(h);%等待用户确认后再运行程序
end
%=======================================================
=====
%function:StartDiscriminant,开始判别按钮的功能函数(回调函数)
%=======================================================
=====
function StartDiscriminant(hObject,eventdata)
[filename, pathname, flag] = uigetfile( '*.xls','请导入测试样本数据(*.xls)','*.xls');%弹出提示对话框
if ~flag
return;%flag为0,用户取消选择,返回;
end
feature=xlsread([pathname,filename]);
lf=size(feature,1);
WhichDisc=get(findobj(UiButtonGroupH,'style','radio','value',1),'string');%当前界面中选择的是哪种判别法
switch WhichDisc
case '距离判别法'
SampleInfo=getappdata(DistanceH,'SampleInfo');%获取判别前准备完成时存储的用于判别的信息
if isempty(SampleInfo) %如果SampleInfo为空值
h=msgbox('距离判别法还没有判别前准备,请点击判别前准备按钮做相应准备~');
uiwait(h);
return;
end
lUc=length(SampleInfo.Uclass);%类别数目
Dist=zeros(lf,lUc);%存储每个样本到每个类的距离,行对应样本,列对应类
for k=1:lf
for kk=1:lUc
Dist(k,kk) = (feature(k,:)-SampleInfo.MeanCfeature(kk,:)) *
SampleInfo.InvSigma{kk} * (feature(k,:)-SampleInfo.MeanCfeature(kk,:))';
end %计算每个样本到每个类的距离
end
[md,ClassNum]=min(Dist,[],2);
Class=SampleInfo.Uclass(ClassNum);
uiwait(helpdlg('当前样本已用距离判别法判别完毕,请按提示保存结果','距离判别法判别'));
[file,path] = uiputfile([filename,'距离判别法判别结果.xls'],'保存当前判别结果为:');
if ~file
uiwait(msgbox('用户放弃保存~'));
return;
end
xlswrite([path,file],Class);
case 'Bayes判别法'
case 'Fisher判别法'
otherwise
end
end
end
[/code][/size][/font]
[attach]160749[/attach][attach]160750[/attach]
本文档为【贝叶斯_fisher判别法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。