线性回归中,我们假设Y满足以sita*X为均值的高斯分布。也就是假设P(Y|X)~N(sita*X,yita)。这种假设拟合P(Y|X)的方法我们称为判别法。
有这么一种方法,尝试去假设X的分布情况,也就是假设拟合P(X|Y)。这就是生成模型。
使用生成模型,得到拟合分布P(X|Y)之后,我们再使用bays规则,求得某个新样本属于某个标签的概率:
然后,取其中概率最大的类作为分类结果:
高斯鉴别分析
高斯分布是熟知的自然分布。我们用多变量的高斯分布,来假设样本特征满足这样的分布,生成高斯鉴别分析模型。
所谓的多变量高斯分布如下:
其中,sigma表示方差矩阵,u表示均值向量。也就是假设X满足分布:
简单的二维高斯标准模型如下,其中u=0,sigma=I;
现在考虑一个分类问题,x为输入特征,y为标签。我们假设x属于多变量高斯分布,y属于伯努利分布,那么有:
进而可以写成:
然后我们要写出其最大释然函数。值得注意的是,现在的释然函数是P(X,Y),而不是之前线性回归的P(Y|X)。
最大化释然函数,得到参数如下:
我们可以把分布图画出,如下:
上如中,两个高斯分布拟合x,从而得出一条直线来划分两类样本。
高斯鉴别模型与logistic回归的关系
高斯鉴别模型与logistic回归有着有趣的联系。如果我们用概率的知识,写出P(Y=1|X)的概率模型,会得到:
与logistic回归有着相同的形式。也就是说,高斯鉴别模型与logistic回归是对同一个模型的不同角度描述。
区别:
有这样的结论:如果P(X|Y)属于高斯分布,那么P(Y|X)会属于logistic分布;但反之不成立。
也就是说,高斯分布比logistic有更强的约束,是一种被包含的关系。
如果原分布就是高斯分布,那么高斯鉴别模型能更好地拟合数据;
而有许多其他的分布,最终也能得到logistic相同的形式,如泊松分布等等。也就是logistic回归对不正确的分布假设有更好的鲁棒性。如果原分布不是高斯,那么我们用logistic分布照样能很好地拟合数据。
结论:logistic回归有更广泛的适用性。
Matlab实现
上述许多图来自斯坦福的讲义,接下来用matlab实现:
以(8,4),(4,8)为中心,方差为1,构建两类正态分布的样本,如下:
Matlab得到样本分布的拟合参数:
clear;
clc;
X1(1,:)=random('norm',8,1,[1,100]);
X1(2,:)=random('norm',4,1,[1,100]);
Y1=zeros(1,100);
plot(X1(1,:),X1(2,:),'+');
hold on;
X2(1,:)=random('norm',4,1,[1,100]);
X2(2,:)=random('norm',8,1,[1,100]);
Y2=ones(1,100);
plot(X2(1,:),X2(2,:),'*');
u0=mean(X1,2);
u1=mean(X2,2);
for i=1:100
X1(:,i)=X1(:,i)-u0;
X2(:,i)=X2(:,i)-u1;
end
X=[X1,X2];
sigma=1/(200)*X*X';
a=sigma'*u1-sigma'*u0;
b=u1'*sigma'-u0'*sigma';
c=u1'*sigma'*u1-u0'*sigma'*u0;
A=a(1)+b(1);
B=a(2)+b(2);
C=c;
A
B
C
x=0:12;
y=-(A.*x-C)/B;
hold on;
plot(x,y);
结果:
拟合得到中心:(3.985,7.985),(4.006,8.081)
协方差矩阵为:
0.99 -0.04
-0.04 1.13
取P(X|Y=1)=P(X|Y=0)得到分界面:
Ax+By=C;
其中:
A = -5.7206
B = 7.4201
C = 9.9559
画出图,如下: