从概率模型到逻辑分类
- 2019 年 10 月 3 日
- 筆記
我今天来推导一下根据 概率模型 来推导一下分类的问题。
题目的大概就是,我们抽取一个样本,然后去判断这个样本应该属于哪个分类。
首先大概的复习一下跟概率论相关的知识概率论的一些基础知识
我们把问题限定为两个类别的分类。即我们有一个(C_1)和(C_2)分类。然后抽取一个样本(X_i),去判断(X_i)应该属于哪个分类。用概率的公式来描述我们的问题
(P(C_?|X_i)) 换言之 (P(C_1|X_i)=1-P(C_2|X_i)) 那么我们只要求出其中一个概率即可。
根据贝叶斯公式,我们可知 (P(C_1|X_i) = frac{P(X_i|C_1)*P(C_1)}{P(X_i|C_1) * P(C_1) + P(X_i|C_2)*P(C_2)})
我们对公式进行一些简单的变换:分子和分母同除以分子可以得到 (P(C_1|X_i)=frac{1}{1+frac{P(X_i|C_2)*P(C_2)}{P(X_i|C_1)*P(C_1)}})
我们设:(Z=ln(frac{P(X_i|C_1)P(C_1)}{P(X_i|C_2)P(C_2)}))得到了(P(C_1|X_i)=frac{1}{1+exp(-Z)})
我们进一步对Z进行变换:(Z=lnfrac{P(X_i|C_1)}{P(X_i|C_2)} + lnfrac{P(C_1)}{P(C_2)})
而(frac{P(C_1)}{P(C_2)}) 我们得到的办法主要是查学习样本的数量,(C_1)的数量为(N_1),(C_2)的数量为(N_2),从而得到
[frac{P(C_1)}{P(C_2)}= frac{frac{N_1}{N_1+N_2}}{frac{N_2}{N_1+N_2}}=frac{N_1}{N_2}]
带入Z中可以得到[Z=lnfrac{P(X_i|C_1)}{P(X_i|C_1)}+ lnfrac{N_1}{N_2}]
我们假定我们的样本是符合高斯(正态)分布的,高斯分布的概率密度公式如下
[f(x)=frac{1}{sqrt{2pi}sigma} exp(frac{(x-u)^2}{2sigma^2})]
即:
[P(X_i|C_1) = frac{1}{sqrt{2pi}sigma_1} exp(frac{(x_i-u_1)^2}{2sigma_1^2})]
[P(X_i|C_2) = frac{1}{sqrt{2pi}sigma_2} exp(frac{(x_i-u_2)^2}{2sigma_2^2})]
带入以后,我们得到原式子简化以后
[Z=lnfrac{frac{1}{sigma_1}}{frac{1}{sigma_2}} + lnfrac{exp(frac{(x_i-u_1)^2}{2sigma_1^2})}{exp(frac{(x_i-u_2)^2}{2sigma_2^2})}+lnfrac{N_1}{N_2}]
进一步简化
[Z=lnfrac{sigma_2}{sigma_1} + frac{(x-u_1)^2}{2sigma_1^2} + frac{(x-u_2)^2}{2sigma_2^2}+lnfrac{N_1}{N_2}]
我们假定两个分类的高斯分布的方差是相等的,即(sigma_1==sigma_2==sigma) 得到
[Z=frac{-2U_1X+2U_2X+U_1^2-U_2^2}{2sigma^2}+lnfrac{N_1}{N_2}=frac{U_2-U_1}{Sigma^2}X + frac{U_1^2-U_2^2}{2sigma^2}+lnfrac{N_1}{N_2}]
我们得知U和(sigma)都是根据样本统计得到,我们并不关系他们具体的数值,所以我们可以假设(W=frac{U_2-U_1}{Sigma^2})和 (b=frac{U_1^2-U_2^2}{2sigma^2}+lnfrac{N_1}{N_2})
我们可以得到[Z=Wx+b]
所以我们的机器学习如果我们利用极大似然函数,求得样本的均值和方差,我们就可以根据特征分布来估计一个样本是否属于一个分类,通过变化,我们完全可以不去计算样本的均值和方差,只需要找到合适的W和B,我们一样可以判断样本属于的分类。
我们只需要找到一个合适的评估函数,去评估我们找到的W和b是否合适。然后不断的去测试我们找到的W和b即可。而我们要找的这个函数如下:
[loss=-[ylnhat{y}+(1-y)ln(1-hat{y})]]
至于为什么选择这样的损失函数呢?吴恩达老师在机器学习的课程中大概提了下,可以分成两种情况,去分别计算
[ loss= begin{cases} -lnhat{y} quad y=1 \ -ln(1-hat{y}) quad y=0 end{cases} ]
把这两个式子整合成一个就得到了上述的损失函数,我们不适用(loss=(y-hat{y})^2)作为损失函数呢?吴恩达老师大概解释是因为他在逻辑回归中不是凸函数,没法进行很好的梯度下降。李宏毅老师的课程中详细进行了分析。
具体的分析如下:加入我们选择了(loss=(y-hat{y})^2)作为损失函数,我们在求梯度下降的时候,需要求得该函数的导数
(frac{dloss}{dw}=2(y-hat{y})hat{y}(1-hat{y})*X)
当我们得到的输出为0或者1时候,不管label是0还是1,得到的导数都是0,梯度就无法下降。这个是根本你的原因。