最近忙成狗,各种意义上。第二章其实之前已经看过了但是已经完全忘记了,于是重新看了一遍当复习。
判别学习算法:直接学习$p(y|x)$,或学习一个假设$h_{ heta}(x)$输出结果
生成学习算法:对$p(x|y)$进行建模(feature, class label),然后根据$p(y|x)=frac{p(x|y)p(y)}{p(x)}$和$p(x)=p(x|y=1)p(y=1)+p(x|y=0)p(y=0)$计算结果。
高斯判别分析
假设p(x|y)服从多元高斯分布$z~N(mu,Sigma)$。其中$mu$为均值,$Sigma=E[(x-mu)(x-mu)^{T}]$为协方差矩阵。
假设y服从伯努利分布。即$p(y)=phi^{y}(1-phi)^{1-y}$。
则其服从高斯分布的模型:
$p(x|y=0)=frac{1}{(2pi)^{n/2}|Sigma|^{1/2}}exp(-frac{1}{2}(x-mu_0)^TSigma^{-1}(x-mu_0))$
$p(x|y=1)=frac{1}{(2pi)^{n/2}|Sigma|^{1/2}}exp(-frac{1}{2}(x-mu_1)^TSigma^{-1}(x-mu_1))$
则其似然函数为:$l(phi, mu_0, mu_1, Sigma)=logprod p(x^{(i)},y^{(i)})=logprod p(y^{(i)}|x^{(i)}, heta)$
与此相比,logistic回归的似然函数为:$logprod p(y^{(i)}|x^{(i)}, heta)$
此时,各参数结果如下:
$phi=frac{1}{m}sum_{i=1}^{m}1{y^{(i)}=1}$
$mu_0=frac{sum_{i=1}^{m}1{y^{(i)}=0}x^{(i)}}{sum_{i=1}^{m}1{y^{(i)}=0}}$
$mu_1=frac{sum_{i=1}^{m}1{y^{(i)}=1}x^{(i)}}{sum_{i=1}^{m}1{y^{(i)}=1}}$
$Sigma=frac{1}{m}sum_{i=1}^{m}(x^{(i)}-mu_{y^{(i)}})(x^{(i)}-mu_{y^{(i)}})^T$
预测公式如下:$argmax_y p(y|x)=argmax_y frac{p(x|y)p(y)}{p(x)}=argmax_y p(x|y)p(y)$
当y服从均匀分布时,p(y)相同,公式可简化为$argmax_y p(x|y)$
高斯分布模型与Sigmoid函数的对比:
对于$P(y=1|x)=frac{p(x|y=1)p(y=1)}{p(x)}$来说,其越接近一侧时,值越接近0;越接近另一侧时,值越接近1。这与Sigmoid函数的情况是类似的。
这里$P(x)=P(x|y=1)p(y=1)+P(x|y=0)p(y=0)$。
相比与logistic,高斯分布是一个更强的假设。即,对于未知的数据,如果假设其服从高斯分布,但是其实际是服从泊松分布的。那么此时logistic回归仍然能取得不错的效果。但如果数据确实服从高斯分布,则利用高斯分布模型可以取得更好的效果。
事实证明,生成算法的优点在于需要更少的数据,logistic回归的优点在于假设更少,模型更健壮。
另,若x|y=1和x|y=0均服从指数分布族,那么p(y=1|x)为logistic回归函数。
朴素贝叶斯
应用:垃圾邮件分类。
若假设y=0或1,1表示是垃圾邮件,0表示不是垃圾邮件。那么首先问题在于,如何确定一封邮件的特征向量。
遍历词典,若该词出现则为1,未出现则为0。
对于一个50000词的词典,其模型应该如下:$p(x|y), xin{0, 1}^n, n=50000$。那么若采用多项式模型,其共有$2^{50000}-1$个参数(所有参数的和为1)。
若使用朴素贝叶斯模型,则需要做一个非常强的假设(朴素贝叶斯假设):给定y的时候,$x_i$是条件独立的。
即$p(x_1,...,x_{50000}|y)=p(x_1|y)p(x_2|y, x_1)...p(x_{50000}|y, x_1, x_2,...,x_{49999})$
$=p(x_1|y)p(x_2|y)...p(x_{50000}|y)=prod_{i=1}^{n}p(x_i|y)$
这个假设意味着:某个单词在邮件中是否出现,对其他单词是否出现没有影响。这个假设显然是不符合实际的,但是其仍然是一个有效的算法。这个模型跟贝叶斯网络类似。
模型参数如下:$phi_{i|y=1}=p(x_i=1|y=1)$,$phi_{i|y=0}=p(x_i=1|y=0)$,$phi_y=p(y=1)$。
joint似然性:$L(phi_y,phi_{i|y=0},phi_{i|y=1})=prod_{i=1}^{m}p(x^{(i)},y^{(i)})$。
则极大似然的参数为:$phi_{j|y=1}=frac{sum_{i=1}^{m}1{x_{j}^{(i)}=1wedge y^{(i)}=1}}{sum_{i=1}^{m}1{y^{(i)}=1}}$(垃圾邮件中某词出现的比例)
$phi_{j|y=0}=frac{sum_{i=1}^{m}1{x_{j}^{(i)}=1wedge y^{(i)}=0}}{sum_{i=1}^{m}1{y^{(i)}=0}}$(非垃圾邮件中某词出现的比例)
$phi_{y}=frac{sum_{i=1}^{m}1{y^{(i)}=1}}{m}$(垃圾邮件占所有邮件的比例)
若预测一封邮件是否为垃圾邮件,即需要计算p(y=1|x)
$p(y=1|x)=frac{p(x|y=1)p(y=1)}{p(x)}=frac{(prod_{i=1}^{n}p(x_i|y=1))p(y=1)}{(prod_{i=1}^{n}p(x_i|y=1))p(y=1)+(prod_{i=1}^{n}p(x_i|y=0))p(y=0)}$
Laplace平滑
对于$p(y=1)=frac{#"1"s}{#"0"s+#"1"s}$, 对每一项都加1,即$p(y=1)=frac{#"1"s+1}{#"0"s+1+#"1"s+1}$
更一般的,如果y可以取k种值,则$p(y=j)=frac{sum_{j=1}^{m}1{y^{(i)}=j}+1}{m+k}$
朴素贝叶斯的一个变种
$xin{1,2,...,k}$,此时$p(x|y)=prod_{i=1}^{k}p(x_i|y)$,这里的$x_i$服从多项式分布(代替伯努利分布)。
对于连续的数据,可以先将其离散化。
对于词汇序列的分类(多元伯努利事件模型)
之前的对垃圾邮件的分类方法,丢失了单词出现次数的信息。
多项式事件模型
对于第i个数据(邮件),其特征向量为${x_1^{(i)},...,x_{n_i}^{(i)}}$,其中$x_i$为第i个数据的单词个数。$x_jin{1,2,...,50000}$为单词在字典中的索引。
此时,$p(x,y)=p(y)prod_{i=1}^{n}p(x_i|y)$,n是邮件的长度。
其参数为:$phi_{k|y=1}=p(x_j=k|y=1)$
$phi_{k|y=0}=p(x_j=k|y=0)$
$phi_y=p(y=1)$
其极大似然函数为$phi_{k|y=1}=frac{sum_{i=1}^{m}1{y^{(i)}=1}sum_{j=1}^{n}1{x_{j}^{(i)}=k}}{sum_{i=1}^{m}1{y^{(i)}=1}cdot n}$(垃圾邮件中词k出现的次数占总垃圾邮件长度的百分比)
$phi_{k|y=0}=frac{sum_{i=1}^{m}1{y^{(i)}=0}sum_{j=1}^{n}1{x_{j}^{(i)}=k}}{sum_{i=1}^{m}1{y^{(i)}=0}cdot n}$(非垃圾邮件中词k出现的次数占总非垃圾邮件长度的百分比)
$phi_y=frac{sum_{i=1}^{m}1{y^{(i)}=1}}{m}$(垃圾邮件占总邮件数的百分比)
上述极大似然估计也可以使用Laplace平滑。
非线性分类器:
对于logistic回归$h_{ heta}(x)=frac{1}{1+e^{- heta^{T}x}}$,可以认为假设值大于0.5时分类为1,小于0.5时分类为0.
根据之前提到的指数分布族的知识,服从指数分布族的分布都可以看作logistic后验分布。朴素贝叶斯也属于这类模型,所以其本质还是线性分类器。
神经网络:多个Sigmoid函数,value函数与反向传播。