登录论坛

查看完整版本 : [MATLAB基础] 关于Bayes 分类器


xiaoqin0622
2011-04-07, 11:11
刚接触matlab,对于其中的一些基本情况有点不太了解,想请教一下一个下面的问题,加红色的字 那里,请教一下定义的问题,那里定义的的是符号,最后显示的也只是一个符号,如果我随后输出的是一个G(x)=g1(x)-g2(x)是两个式子的之差,那该如何定义为好,而这个X=【x1;x2】向量我是要在两一个参数M文件中输入的,清各位朋友指导一下,谢谢。 中间的一些都是算法,不需要看
function bayes_classifier(feature1,feature2,p1,p2);
%-----------------------------------------------------
% bayes_classifier(class1,class2,p1,p2); 两类,两特征
% % INPUT variables:
% - feature1 - feature vector of the size (m,2) ,m是第一类的样本数
% - feature2 - feature vector of the size (n,2) ,n是第二类的样本数
% - p1 - 先验概率1
% - p2 - 先验概率2
% 判别式
% g1(x) = A1*x1^2 + B1*x1*x2 + C1*x2^2 + D1*x1 + E1*x2 + F1
% g2(x) = A2*x1^2 + B2*x1*x2 + C2*x2^2 + D2*x1 + E2*x2 + F2

syms x1
syms x2

cov1=cov(feature1);
cov2=cov(feature2);
mu1=mean(feature1);
mu2=mean(feature2);

detcov1=det(cov1);
detcov2=det(cov2);
invcov1=inv(cov1);
invcov2=inv(cov2);

W1=-0.5*invcov1;
w1=invcov1*mu1';

W2=-0.5*invcov2;
w2=invcov2*mu2';


omega1=-0.5*(mu1)*invcov1*mu1'-0.5*log(detcov1)+log(p1);
omega2=-0.5*(mu2)*invcov2*mu2'-0.5*log(detcov2)+log(p2);

omega=omega1-omega2;

X=[sym(x1); sym(x2)]; 这里定义的是符号
X_t=[sym(x1) sym(x2)];

digits(2);
a=X_t*(sym(W1,'d')*X);
a=simplify(a);

b=(sym(w1','d')*X); %注意这个w1有一个转置。

c=X_t*(sym(W2,'d')*X);
c=simplify(c);

d=sym(w2','d')*X;

eq1=a+b+sym(omega1,'d'); %eq1 就是g1(x)
eq2=c+d+sym(omega2,'d'); %eq2 就是g2(x)


disp(['Discriminant function for the first class:']);
disp(eq1);
disp(['Discriminant function for the second class:']);
disp(eq2);