📄 multiclassfisher.m
字号:
function [accuracy,predicted]=multiclassfisher(train_data,test_data,train_label,test_label)%UNTITLED1 Summary of this function goes here% Detailed explanation goes hereclass_num=length(unique(train_label));%多少类mean_by_class=zeros(class_num,size(train_data,2));%各类样本的均值sum_by_class=zeros(class_num,size(train_data,2));%各类样本的总和every_class_num=zeros(1,class_num);%每类包含的样本数for i=1:size(train_data,1) every_class_num(train_label(i))=every_class_num(train_label(i))+1; sum_by_class(train_label(i),:)=sum_by_class(train_label(i),:)+train_data(i,:); endfor j=1:class_num mean_by_class(j,:)=sum_by_class(j,:)/every_class_num(1,j);endSi=cell(1,class_num);for i=1:class_num Si{i}=zeros(size(train_data,2));endfor i=1:size(train_data,1) Si{1,train_label(i)}=Si{1,train_label(i)}+(train_data(i,:)-mean_by_class(train_label(i)))'*(train_data(i,:)-mean_by_class(train_label(i)));endW=cell(class_num);%vector for projectionY=cell(class_num);%thresholdfor m=1:class_num for n=1:class_num if m~=n W{m,n}=inv(Si{1,m}+Si{1,n})*(mean_by_class(m,:)-mean_by_class(n,:))'; end endendfor m=1:class_num for n=1:class_num if m~=n Y{m,n}=W{m,n}'*(sum_by_class(m,:)+sum_by_class(n,:))'/(every_class_num(m)+every_class_num(n)); end endendpredicted=zeros(length(test_label),class_num);%预测向量for k=1:length(test_label) for m=1:class_num for n=1:class_num if m~=n J=test_data(k,:)*W{m,n}; if J>Y{m,n} predicted(k,m)=predicted(k,m)+1; else predicted(k,n)=predicted(k,n)+1; end end end endendtemp=zeros(size(test_label));for i=1:length(test_label) for j=1:class_num if predicted(i,j)==max(predicted(i,:)); temp(i)=j; end endendpredicted=temp;count=0;for k=1:length(test_label) if predicted(k)==test_label(k) count=count+1; endendaccuracy=count/length(test_label);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -