《机器学习实战》-- 逻辑斯蒂回归<一>
2017-12-02 21:47
288 查看
引言
回归我们知道有线性回归,线性回归模型能够无限的逼近我们的结果。以(xi,yi)为例,通过线性回归 f(x)=wTx+b表达式,就可以得到我们对yi的估计值。回归到分类
如何从线性回归转换到分类呢?由于线性回归得到的是连续值,z=wTx+b,z的范围[−∞,∞],是这样的一个连续值无法直接转换为类别。那怎么办?最简单粗暴的方法,在二分类中,我们设定一个阈值0,当z的值大于0我们就把他归类为1,小于0归类为0,z=0时就归类为0,那不就是得到如下表达式了吗?p=⎧⎩⎨⎪⎪0z<00.5z=01z>0
如果我能画个图就好了,你看这个表达式像什么,是不是有点像符号函数(单位阶跃函数)。符号函数有一个特点,那就是啥?不可导。不可导会导致什么后果。比如说,预先设置w=w1,w2,...wn的初始值都为1,给定一个样例(xi,yi),当然此时的x为一个向量。所以通过z=wT∗x+b得到z值,然后根据符号函数得到p,发现预测的类别和我们的yi不一致,我们是不是要回去更新w值,怎么更新,用梯度啊,求导啊。可是不可导啊,那可咋整。所以我们不能用线性回归去做分类,因此我们需要找一个函数来把刚才计算的z转换一下,于是对数几率函数就出现了。y=11+e−z它就可以把刚才的线性函数转换为非线性的,而且是处处可导的。范围在0-1。将刚才的线性函数带入对数几率函数中得到y=11+e−(wT∗x+b)。这个函数就把[−∞,∞]映射到了[0,1]实际上我们的y值代表的就是类别为1的概率,那么1−y就是类别为0的概率。好吧,那我们就以概率的形式来把他们表示出来:P(y=1|w,b,x)=11+e−(wT∗x+b)
P(y=1|w,b,x)=hw(x)
P(y=0|w,b,x)=e−(wT∗x+b)1+e−(wT∗x+b)
P(y=0|w,x,b)=1−hw(x)
我们可以把第二和第四个公式合并成一个,J(hw(x),y)=hw(x)y(1−hw(x))(1−y)如果y=1,1−y=0就剩第一项了,我们就得到了类别为1的概率。如果y=0,就只剩第二项了,也就是类别为0的概率。将其取对数之后,得到J(hw(x),y)=ylnhw(x)+(1−y)ln(1−hw(x))这样给定一个样本,我们就可以得出该样本属于一个类别的概率,而这个概率越大越好,也就是我们希望上面的代价函数能够取到最大值。
当然上面是这对一个样本的代价函数,我们要通过多个样本来估计参数w需要用到什么知识。当然是极大似然函数了,如果不明白可以参考我的前一篇博客。假设样本之间是相互独立的,所以要先将所有样本的代价函数乘起来,然后取对数将乘转换为加。即:
J(w)=∑i=1n[yilnhw(xi)+(1)+(1−yi)ln(1−hw(xi))]n为样本个数,我们的目的就是求一组w,它能让上面这个代价函数取到最大值那就得用梯度上升算法,夷,一般不都是取最小值吗?我们在J(w)前面加一个负号就是取最小值了,就可以用梯度下降算法了。本质上是一样的,只是一个负号的问题。
梯度下降算法
梯度下降算法的目的就是不断的更新w的值,使−J(w)取到最小。梯度下降算法的表达式就是:wi=wi−∂J(wi)∂wi所以我们需要对J(w)求导数,求导前,我们先捋一捋:hw=g(wT∗x)=11+e−(wT∗x)这就用到链式求导法则了:
∂J(w)∂wi=∂J(w)∂g(wT∗x)∗∂g(wT∗x)∂wT∗x∗∂wT∗xwi那这三项需要我们一个一个的来求
第一项的求导结果为:∂J(w)∂g(wT∗x)=y∗1g(wT∗x)+(y−1)11−g(wT∗x)
第二项的求导结果为:
∂g(wT∗x)wT∗x=e−(wT∗x)(1+e−(wT∗x))=1(1+e−(wT∗x))∗(1−11+e−(wT∗x))=g(wT∗x)∗(1−g(wT∗x))
第三项的求导结果为:
∂wT∗x∂wi=∂J(w1x1+w2x2+..+wnxn)∂wi=xi
所以,三项求导都完成了,我们可以得到最终的求导结果为:
∂J(w)wi=wi−α∗xi∗[yi−g(wT∗x)]
OK,按照这个公式更新参数我们就可以完成得到最终的w了。
终于写完了,累死我了。
相关文章推荐
- 《机器学习实战》--逻辑斯蒂回归<二>
- <转>Spark中组件Mllib的学习26之逻辑回归-简单数据集,带预测
- <机器学习笔记-04 ><scikit-learn 04>逻辑回归
- 75道逻辑推理题<一>
- 逻辑回归(LR)算法java实现<转>
- <统计学习方法>5 逻辑斯蒂回归与最大熵模型
- <转>Spark Mllib逻辑回归算法分析
- WAS集群安装<一>系统环境配置和规划
- 算术左移(<<),算术右移(>>),逻辑右移(>>>)
- C++学习笔记&lt;一&gt;
- 四,JavaWeb简略的谈下前端技术<一>HTML5的各个标记
- 那些优美的英文句子<一>
- Android中Input型输入设备驱动原理分析<一>
- Jdbc基本操作<一>
- SpringMVC 学习指南<一>
- 黑马程序员 Java基础<一> 数组及排序
- 多线程并发库_<一>
- 二叉树<总结一>
- R语言做评分卡模型<一>
- 逻辑斯蒂回归(LogisticRegression)sklearn的一个例子中文解释