zoukankan      html  css  js  c++  java
  • 从概率模型到逻辑分类

    我今天来推导一下根据 概率模型 来推导一下分类的问题。

    题目的大概就是,我们抽取一个样本,然后去判断这个样本应该属于哪个分类。

    首先大概的复习一下跟概率论相关的知识概率论的一些基础知识

    我们把问题限定为两个类别的分类。即我们有一个(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= egin{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,梯度就无法下降。这个是根本你的原因。

  • 相关阅读:
    OpenERP实施记录(12):付款处理
    OpenERP实施记录(10):采购补货
    OpenERP实施记录(9):销售一批电脑
    从一个action地址获取信息
    在线杀毒 (最大文件大小64MB)
    WIN7启动WIFI
    Lazy Load, 延迟加载图片的 jQuery 插件【备忘】
    Android 汉字转拼音之JNI篇
    Android Studio 解决方法No JVM installation found. Please install a 64-bit JDK.
    Unity3D移植到自己的Android程序
  • 原文地址:https://www.cnblogs.com/bbird/p/11527763.html
Copyright © 2011-2022 走看看