一、生成学习方法与判别学习方法
前面学的逻辑回归、最小二乘法等方法,均属于判别学习方法(discriminative learning algorithm,DLA),这类方法的特点在于,直接根据样本数据,得到p(y|x),或者得到假设hθ(x),输出为0或者1。而生成学习方法(generative learning algorithm,GLA)则不同,虽然同样是对样本数据进行处理,但它处理后会得到先验概率p(x|y)(即给定某一个类y,会具有特征x的概率)和p(y),以此建模。对于任意新样本,根据贝叶斯公式p(y|x) = p(xy)/p(x) = p(x|y)p(y)/p(x),可以得到对应的后验概率p(y|x)。
二、高斯判别分析
高斯判别分析是一种生成学习算法,首先回顾一下多维高斯分布(又叫多维正态分布)的定义:
设随机变量x满足多元高斯分布,x~N(μ,∑),其中均值向量为μ,协方差矩阵为∑。
它的密度函数为:
对于不同的μ和∑,以二维高斯分布为例,得到的图形如下
这些图形中μ=0,∑取值分别为
可以看出,∑对角线取值越大,图形越平缓
另外,改变∑的斜对角线,图形则会变得扁平,如下:
此外,斜对角线取负值,则会向上图的90度反方向变扁,而改变μ值会使得图像发生平移,具体可见视频,这里就不贴出来了。
回到高斯判别分析,此算法就是以上面的理论为基础。首先,对于算法要进行两个假设:
1、假设输入特征x∈Rn,并且是连续值;
2、p(x|y)是高斯正态分布。
于是对于一个待模拟的模型p(y),因为此时我们是用生成学习方法来模拟一个服从于伯努利分布的模型(如癌症的阴阳性),于是有:
模型的参数为φ,μ0,μ1,∑,对应的极大似然函数的对数为:
其中那些p(xi|yi,μ0,μ1,∑),p(yi;φ)等等,就是上面的p(y),p(x|y=0)这些式子。
换句话说,对于每个训练样本集,对该函数进行对数最大化,再代入所有训练样本的数值,就可以得到各个参数的极大似然估计,即得到了GDA的模型。各参数的极大似然估计为:
另外对比一下判别学习方法的极大似然函数L(θ),那个求的是一组θ,使得p(yi | xi)似然性最大,函数的项是p(yi | xi),而在生成学习方法中,求的是上面几个参数,另外函数的项是p(xi | yi);
最后,对于一个新输入的样本x,预测结果应该是给定x的情况下最可能的y,预测公式如下,以左边为例,运算符argmax表示计算p(y|x)最大时的y值:
分母p(x)可以忽略,因为其独立于y。而如果p(y=0)=p(y=1),则p(y)也可以省略
三、GDA和逻辑回归的联系
具体构造见视频,如上图所示,我们在假设中说p(x|y=0、1)服从高斯分布,即图中的两个钟形曲线,右边是y=1的样本,然后计算p(y=1|x)时,得到的曲线几乎与逻辑回归的sigmod函数一样。当然,这两者还是有本质上的区别的。
四、生成学习方法的优缺点
根据上一节最后说的,引出了这么几条推论:
x|y 服从高斯分布 => p(y=1|x)是logistic函数,该推论在反方向不成立。这说明GDA比逻辑回归做了更强的模型假设。因此如果p(x|y)真的服从或者趋近于服从高斯分布,则GDA比logistic回归效率高。相反,如果不确定p(x|y)的分布,那么用逻辑回归更为保险,比如x|y=0, y=1均服从于泊松分布,得到的p(y|x)也可以表示成逻辑回归的形式。也就是说,如果我们此时假设的是p(y|x)服从逻辑分布,得到的结果和假设p(x|y)服从泊松分布的效果相差不是很大,但如果假设的是p(x|y)服从高斯分布,效果肯定就没那么好了。
说得有点绕,注意理清上面哪些是p(x|y)哪些是p(y|x)
另一方面,正是由于GDA的假设较强,所以用较少的数据能拟合出不错的模型。而logistic回归的假设较弱,对模型的假设更为健壮,拟合数据需要更多的样本。
五、朴素贝叶斯算法
以前也接触过贝叶斯算法,这里简单记录一下。
课程举例用的是垃圾邮件分类,首先是把一封邮件作为输入特征,与已有的词典进行比对,如果出现了该词,则把向量的xi=1,否则xi=0,例如:
这么一个特征向量,用多项式拟合是不太可能了,假设有50000个词,因为x有2^50000个可能,所以如果要想写成上面的φ*(1-φ)的形式,则需要2^50000个参数,显然太多了,所以就有了贝叶斯分类。
贝叶斯分类有一个前提,我们需要做 一个很强的假设:假设给定y,xi是条件独立。此假设的目的在于,如果有两个特征值x1,x2,那么他们之间不会相互影响,即p(x1|y)*p(x2|y, x1)=p(x1|y)*p(x2|y);
因此对于先验概率,有:
其中,每项都有三个模型参数,对应的极大似然估计为:
有了这些参数,则对于一个新输入的样本,可得后验概率为:
另外还引入了拉普拉斯平滑,简单来说,如果一个词从未出现过,那么贝叶斯就会判定它的先验概率为0,但从统计学角度来说这并不科学,因为你不能因为没见过这个词,就肯定它的概率为0,所以在公式中引入拉普拉斯平滑,使得其不为零。