详情请参阅《模式分类》第二版第二章上机练习2.5节第2题
数据说明:
有w1,w2,w3三组样本数据如下(符合正态分布):
(1)假设P(w1)=P(w2)=0.5,P(w3)=0,仅利用x1特征值为这两类判别设计一个分类器,并确定样本的经验训练误差,即误分点的百分比。
(2)假设P(w1)=P(w2)=0.5,P(w3)=0,利用x1,x2两个特征值为这两类判别设计一个分类器,并确定样本的经验训练误差,即误分点的百分比。
(3)假设P(w1)=P(w2)=0.5,P(w3)=0,利用x1,x2和x3三个特征值为这两类判别设计一个分类器,并确定样本的经验训练误差,即误分点的百分比。
实验步骤:
由于这两类数据符合正态分布,可以求出每一类数据的均值mu和协方差sigma,然后我们利用课本第二章式(49)的判别函数来对每一个样本数据进行判别分类。原本在w1类的数据点被分进w2或原本在w2的数据点被分进w1的那部分即为误分的数据点,误分点的百分比即为误分的数据点个数占全部数据的百分比。
由于我们在进行判别的时候会频繁用到式(49)的判别函数,因此我们将其写成一个函数,需要的时候调用即可。Matlab程序如下:
function r=discriminant_function(x,u,sigma,P)
% Inputs:
% x - Input vector:d*1
% u - Mean of distribution:d*1
% sigma - Covariance matrix of distribution:d*d
% P - Prior probability
% Ouputs:
% r - Discriminant result
r= -0.5*((x - u)'/sigma)*(x - u) - size(u, 1)/2.0*log(2*pi) - 0.5*log(det(sigma)) + log(P);
end
需要注意的是,输入向量x是d维列向量,均值u是d维列向量,sigma是d*d的方阵。
现在