⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bayesclassify.m

📁 bayes 判别分析的matlab程序代码
💻 M
字号:
function A=bayesclassify(S,T,Q)

%给定已知样本 S 、待判样本 T 和先验概率 Q 。bayesclassify(S,T,Q) 函数输出待判样本 T 的判别结果。
%S (n*(m+2))的矩阵,其中第一列是序号,最后一列表示所属类别。S表示已知样品矩阵
%T 是待判样本
%Q (k*1)的向量 是k个总体的先验概率
%
%例
%输入
%S=[
%  1	76	    99	    5374	    1
%  2	79.5	99	    5359	    1
%  3	78	    99	    5372	    1
%  4	72.1	95.9	5242	    1
%  5	73.8	77.7	5370	    1
%  6	71.2	93	    4250	    2
%  7	75.3	94.9	3412	    2
%  8	70	    91.2	3390	    2
%  9	72.8	99	    2300	    2
% 10	62.9	80.6	3799 	    2
%  ]
%
%
%T=[
%  11	68.5	79.3	1950
%  12	69.3	90.3	5158
%  ]
%
%Q=[
%  0.5
%  0.5
%  ]
%
%运行A=bayesclassify(S,T,Q)
%
%判别结果
%A =
%     11     68.5     79.3     1950     2
%     12     69.3     90.3     5158     1
%其中最后一列为判别结果


%%%%%%%%%%%%%%计算各总体的均值和协方差阵%%%%%%%%%%%
[l,zz]=size(T);
[n,mm]=size(S);
m=mm-2;
Ss=sortrows(S,mm);
v=Ss(:,mm);
k=max(v);
a=zeros(1,k);
b=a;

mu=zeros(m,k);

for i=1:k
    a(i)=min(find(v==i));
    b(i)=max(find(v==i));
end
Sigma=zeros(m,m,k);
for i=1:k
    Sa=Ss((a(i):b(i)),(2:mm-1));
    mu(:,i)=mean(Sa)';
    Sigma(:,:,i)=cov(Sa);
 end


%%%%%%%%%%%%%%%%%%%% 判别过程  %%%%%%%%%%%%%%%%%%%%
for i=1:l
    p=zeros(1,k);
    u=zeros(1,k);
    d=zeros(1,k);
    for j=1:k
        d(j)=-0.5*(T(i,(2:mm-1))-mu(:,j)')*inv(Sigma(:,:,j))*(T(i,(2:mm-1))'-mu(:,j));
        u(j)=log(Q(j))-0.5*log(det(Sigma(:,:,j)))+d(j);
    end
    x(i)=(find(u==max(u)));
end
x=x';
A=[T,x];


    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -