zoukankan      html  css  js  c++  java
  • Machine Learning/Introducing Logistic Function

    Machine Learning/Introducing Logistic Function

    打算写点关于Machine Learning的东西, 正好也在cnBlogs上新开了这个博客, 也就更新在这里吧。

    这里主要想讨论的是统计学习, 涵盖SVM, Linear Regression等经典的学习方法。 而最近流行的基于神经网略的学习方法并不在讨论范围之内。 不过以后有时间我会以Deep Learning为label新开一个系列, 大概写写我的理解。 总之Machine Learning的label下都是和一些数学上比较清晰的东西, 不会像deep learning一样要等着Brain Science那群人做实验, 找出新东西才能确定方向。

    第一篇本来觉得从Linear Regression开始比较好, 引入问题后导入MP一般逆就能解决。 最后还是不打算这么写, 太简单了没有什么价值。 于是从Linear Regression开始。

    最后, 刚刚设置了latex的代码, 不知能不能用, 不行的话事后再修改。

    • Logistic Classification

    首先来考虑一个问题, 我们有一组数据$X$, 现在打算将它分类成$k$个类$C$, 那么应该怎么办?

    我们这么考虑, 对于每一个数据$x$, 显然都有$P(C_i|x)$, 代表了每个数据属于这个类的分布, 我们的目的就是找出一个最好的分界线, 让每个数据能有最大概率属于某个类。 (说句闲话, 当然我们也有$P(x)$, 并且有联合分布$P(C_i,x)$, 我们会在今后用这个结合bayesian的想法去做些更有意思的事情。 不过因为不是这次的主题, 下面不再提及。) 解决这个问题虽然有很多方法, 为了导出logistic, 这里我们用log-odds来解决这个问题。

    $log(frac{P(C_i|x)}{P(C_k|x)}) = eta x + alpha$

    在这里, 对于每个类$C_i$, 我们都选择一个固定的类$C_k$作为参考, 同时只用linear model。 最终显然会有$k-1$个分界。现在我们来求每个$P(C_i|x)$:

    $P(C_i|x) = frac{e^{eta x + alpha}P(C_k|x)}{Z( heta)}$

    这里凭空多了个$Z$, 这是归一化项, 它是所有$P$的总和$Z( heta)=P(C_k|x)+sum_i{e^{eta x + alpha}P(C_i|x)}$, 注意到因为$C_k$我们已经单独拿了出来, 所以单独加上。

    现在试着将$Z( heta)$带进去, 看看发生了什么? $P(C_k|x)$消失了, 我们得到了一个新的式子:

    $P(C_i|x) = frac{e^{eta x + alpha}}{1+sum_i{e^{eta x + alpha}}}$

    看起来是不是很眼熟? 这个其实就是multi-class下面的logistic的形式。 当然, 在neural network里面, 他有个很唬人的名字, 叫做SoftMax Layer。 但值得注意的是这里我为了简单, 省略了$eta$和$alpha$的下标, 显然对不同的clas需要不同的曲线。

    当然, 如果$k=2$, 他自然会回到我们熟悉的形式:

    $P(C_i|x) = frac{e^{eta x + alpha}}{1+e^{eta x + alpha}}$

    这就是我们熟悉的logistic function。 虽然导出的过程多少有点不太令人满意, 但最终还是得到了这个结果。实际上完全不必拘泥于这个方法, 随着深入, 我们会看到各种各样的方法里都能够自然地导出logistic function, 比如在RBM里, 我们就能发现$P(1|x)$是logistic function。 这也是为什么很多方法都倾向于选择这个非线性方程。

    • 在最开始我提到了linear regression, 在logistic function的推到过程里也不加说明的用了线性边界, 这里应该有必要简单的介绍下这个问题。

    首先是问题设定, 我们依然有一组数据$X,Y$, 我们想找出这组数据的特征。 所谓特征, 你可以想象有一堆点, 它们排成直线, 那显然我们如果有$eta x + alpha$的话, 特征就是两个参数$eta$和$alpha$, 有时我们也会称这个为数据的结构, 它们表达的意义差别不太大。

    简单的说, 我们就是想用直线拟合这组数据, 如果没记错, 中学生都学过如何用最小二乘法拟合一组数据, 并且给出误差。 不过中学生的知识水平还很难把这个问题写成简单的形式, 我们这里当然不会出现$sum_{ij}|x_i-x_j|^2$这种形式。

    当然, linear regression的应用范围很广, 分类问题也可以处理。比如我们将每个类都设置为$e_i$, 然后自然就可以用linear model去找一个平面进行分类。 过程跟这里是完全一样的。

    为了后面更容易解释, 我们稍微换个方向看这个问题, 我们有一组数据$x$, 如果它有什么结构, 那么一定就有这么一个函数能生成它, $f(x)=y$, {x,y}就是现在我们看到的。 因此我们的目标自然就是尝试找到$f$.

    对于linear model, 这个问题非常简单

    $Bx=Y$

    只要有$B$, 一切就解决了。 不过这个事情没有想象中那么简单, 因为很多时候这个等式是无解的, 直接去求显然不合适。 因此我们转而去尝试最小化下面这个式子:

    $f=|Bx-Y|^2$

    这里我们加了L-2范数来保证能够最小化。 或许你会怀疑为什么没有偏移项, 这是因为为了简单, 我们把偏移项放进了B和x里, 从而不再需要求两次导数了。

    到这里一切就显得很清晰了, 虽然很多时候不能保证误差为0(实际上是所有情况下, 因为实际问题的观测数据总和真值有偏移, 我们需要$E(Y)$才能推测真值), 但总是可以最小化这个误差。取导数, 令$f’ = 0$, 我们可以得到:

    $B=(x’x)^{-1}x’Y$

    这个结果很容易推导, 我也不给出详细的过程。 但这个结果很有意思。你可能已经注意到了, 这个形式满足M-P逆的四个条件, 也就是说这是M-P逆的表达形式。

    虽然我们并没有引入vec算符, 也没有引入固有向量分界后空间的意义, 从数学上讲可能很难。 不过可以想像一下这个函数干了什么。 首先, 如果我们能够找到一个完美的$f$, 显然这个曲线会和点完全重合。 但首先我们的模型可能太过简单, 那么我们就用了直线上距离观测点最近的地方作为预测结果, 相当于一个投影过程, 这也是MP逆的定义所导出的东西。

    当然, linear regression也会有很多变形和优化方法。 不过今天就到此为止, 今后我们会讲讲LASSO, 局域权重等一些实际中常用的东西。 或许还会补补数学上的一些东西。 总之, 以后有机会再见。

  • 相关阅读:
    使用 jQuery Uploader 显示文件上传进度
    Uploadify插件上传图片并且插入到FCKeditor
    Flex与.NET互操作(一):基于Socket的网络连接
    JQuery上传插件Uploadify使用详解
    让自定义登录程序像 Membership 一样
    Stream 和 Byte[] 互操作
    AspNet控件开发(1)入门介绍
    Visual Studio 2008 集成SP1补丁
    asp.net 解决下载文件–中文名乱码问题
    不错的一个JS框架
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3197908.html
Copyright © 2011-2022 走看看