说明
本文参考以下内容:
- Andrew Ng在斯坦福的cs229, cs229
在下文笔较烂, 恐贻笑大方。 不过因为是markdown 写的, 有不足, 改进比较方便, 所以欢迎提出意见及建议,找出问题, 谢谢。
导读
线性回归基础介绍了线性回归基础的三大要素:
- 模型, y=h(x)=w*x+b, 为求方便,b=w0⋅x0
- 策略。 损失函数 J(w)=(h(x)-y)2
- 算法。 梯度下降法(批量和随机), 对w向量的各个分量求偏导,迭代。
这篇文章会基于线性回归的基础, 介绍第一个分类方程--逻辑回归 logistic regression.
之前说回归和分类是两类问题, 而现在要讲的逻辑回归却主要用于解决分类问题, 虽然它确实是回归方法,输出值是连续非离散的。
模型
关于线性回归为什么不能用于分类--这个问题我就不讨论了。
分类问题,特别是二元分类问题--只有两类--是很明显的。如图:
首先, 我们要明确一点,虽然不再是线性回归了,但线性这个还是没跑的。也就是说我们要用一条 直线 来划分两类数据,更复杂的非线性分类方法以后会有。
还是老问题,现实中的数据用线性来拟合最简单, 而且也不知道它实际上会符合什么样的数学模型, 所以线性模型大概也够了, 不要自己给自己找不痛快了。 深度学习是深度学习,不一样。
建模时, 比如上图, 决定用直线y=w⋅x来划分。 那接下来就是用数学来表示这条直线了。
分类定义
先对分类问题进行定义。 分类, y值肯定是离散的, 这例子里就两类,那就可以写成 y∈[0,1]或[-1,1], 习惯上取前者[0,1]。
这例子, x的参数有几个呢?
A. 1
B. 2
C. 3
D. n
E. 不知道
分类超平面
肯定是2个, x轴和y轴啊, y已经有定义? 那就x1轴和x2轴。
2维平面上的分类, 所以用1维的直线来分类, 如果是3维空间中的分类,则用2维平面来划分。
如果是维度为n的高维空间, 就要用n-1维的超平面来分类, 这就是 分类超平面。
这里的直线假设是w1x1+w2x2+w0=wx=0。
因为,y值跟我们习惯上的 y(即x2)轴没什么关系。真要画图表示的话, y值要画成第三条轴,而且只有0、1两个值。
那这条直线跟y值 怎么关联的? 很明显, 直线左边和右边对应两个类别。
换数学一点就是:
yi={0wTxi<01wTxi≥0
所以我们要从wTxi的实数值映射到{0,1}上, 也就是加个函数变换, 就是
g(wTxi)
毫无疑问, 上面那个<0,>=0可以作为一个g函数。如果基于这个, 那就是 感知器模型算法(Perceptron)。
它和逻辑回归非常像, 策略和算法部分也一致, 虽然还没讲到。现在继续讲逻辑回归。
但用这个作为g函数有什么问题?
A. 一视同仁,无视远近
B. 太暴力
C. 不知道,哪有那么多问题
D. 没法解释
g函数
我们要把点到分类直线的远近考虑到,可以认为是类似权重之类的。那起码有两种方案:
- 与0比较大小之外,再添加距离作权重——这个算是svm的方式, 请看svm基础
- g函数映射时,把值分开。
第2种方案是本文的重点。因为y取0或1,所以就要满足:
- x=0时居中, 比如标准0.5。
- 负无穷时趋近于0
- 正无穷时趋近于1。
大概这意思, 而且趋近不能太慢,刚从0值变化时,要有个比较剧烈的变化。
可选函数应该有很多, 比较常用的是 sigmoid函数:
g(z)=11+e−z
曲线如图:
模型总结
综上所述, 我们得到了我们的模型:
h(x)=g(wTx)=11+e−wTx
策略
基于模型, 我们来考虑策略、损失函数了。
用最小二乘法的(h(x)-y)2 怎么样呢?很少有讨论--PASS。
这里直接上概率式子(具体推导请用误差正态分布代入h(x)自行推导):
P(y=1|x;w)=h(x)P(y=0|x;w)=1−h(x)所以:P(y|x;w)=h(x)y(1−h(x))(1−y)
又看到了复杂的乘法及指数,所以求个对数得:
l(w)=∑yilogh(xi)+(1−yi)log(1−h(xi))=yTlog(h(Xw))+(1−yT)log(1−h(Xw))
简单粗暴
算法
继续求最优化的算法, 这里是求似然值的最大值, 不是之前的最小。
梯度下降法通用,所以是:
w=w+α∇wl(w)
因为求最大, 所以梯度方向是求最大,使用+加法,反方向是求最小,才用减法。
这个求导过程也请自行尝试。结果为(希望没有写错):
∇l(w)=yT(y−h(x))
总结
本篇从线性回归的线性模型开始,一步步介绍
- 分类超平面的引入(wTx=0)
- 根据点和超平面的关系,需要对wTx进行转换。
- 引入 sigmoid函数(分类问题经常用到,非常常用)
- 逻辑回归的策略--似然值表达式
- 使用梯度下降处理
恭喜
恭喜您读完本节内容, 完结撒花!!!