机器学习9

来源:互联网 发布:没有好奇心 知乎 编辑:程序博客网 时间:2024/05/21 18:00

机器学习第10章走起。

现在我们有兴趣的不仅仅是二元的分类,我们有兴趣的输出是一个[0,1]这样的输出

比如


但是在实际中的资料,我们很难得到0.9,0.6,0.2这样的数字,因为我们在现实中,我们只能看到这件事情发生没有, 但是并不能看到它发生的概率是多少。

所以我们可以把现实中实际的资料看成上面那个东西有杂讯的版本。

即这个是有杂讯的版本


那么我们现在的问题就是我们需要的是第一个图那样的输出,但是我们现在仅仅有第二章图这样的资料,我们应该怎么做?

我们也可以像线性回归求出一个分数,然后利用S曲线来得到一个0到1之间的值。

这就是logic  function

我们最常用的logistic function是这样的。



所以逻辑回归的基本形式是



线性分类: h(x) = sign(s) error 方式 :01error

线性回归: h(x) = s           error 方式 :平方方式

逻辑回归:    h(x)=θ(s)        error 方式:

下面继续


如图所示对于p(y|x),我们可以直接用f(x)来表示y=1 的时候,而用1-f(x)来表示y=-1的情况。

那么对于D来说,我们可以用左边的式子来表示。

现在我们并不知道h,我们假设找到一个很好的h,那么如果这个h很好,就说明,在h上运行的结果会非常接近f

因为f已经实实在在产生了这个资料,所以对于这个左边的式子,概率非常非常大,所以我们应该找的那个h也应该是可能性最高的那个,也就是说找一个h使得右边这个式子的运算结果最大。

对于逻辑回归函数

h(x) = θ(w转置x)

1-h(x) = h(-x)

所有上图右边的式子

可以变成


所以


上图中的y就是对应前面的符号,即是圈圈还是叉叉,即是+1还是-1

那么变换一下,得到


这里我说一下,因为h是我们假设的那个函数,而h(x) =θ(w转置x),这表示在x的前提下,为1的概率,而在x的前提下为0的概率为1-θ(w转置x)=θ(-w转置x)

因为p(y|x)=θ(yw转置x),y=1的时候满足,y=-1的时候满足。所以有了上面这个式子的变化。

因为这里是连乘,所以我们用对数函数,把连乘换成连加

因为对数函数的单调性,我们可以直接取对数


然后化简得到这个式子。这里需要说明一下,开始不是求的最大值嘛,为什么这里变成最小值了,因为我们加了一个负号以后,就需要我们求最小值了。

而作者又把上面这部分叫做error,我开始不太了解,这部分为什么叫做error,后来我是这样理解得。因为那个f对应的值,因为实际中已经出现,所以概率很大,接近1,

而我们的error应该是表示f(x)和h(x)的差距,而我们这里取了对数,所以用f(x)的对数和h(x)的对数的差距来表示error,而f(x)的对数显然为0,0减去一个东西,就相当于加上一个负号,这就是我们前面提到的那个加一个负号,作者在课上只说加一个负号,方便求最小值,然后就说这个是error,而没有详细说明。这里是我的想法,需要验证对不对,如果有懂的朋友看到了,麻烦给我说一下哈。


所以error就是我们前面说的Ein,所有变化有下式




这是我们的Ein,那么我们现在的目标是什么,就是如何找到一个合适的w使得Ein最小。

由于这个函数是convex的,所以我们需要找到梯度为0的地方。

所以我们需要求导,至于求导这个过程,这里就忽略,如果不懂,可以自行补充微积分知识。

所以最后我们可以得到




如果梯度=0.一种是所有的θ(i) =0 ,那么要求ywx >> 0,显然这需要资料本身线性可分才行,否则肯定不行

另外一种是所有的和为0,但是这个不好解。

所以,我们考虑像PLA这样的思想来更新迭代w,使得它变好。


这个η是学习速率,后面会提到,至于右边,如果我们的w的结果和y不同,那么就迭代一个yx,如果一样,那么前面那部分为0,自然就不会迭代了。

现在我们要如何迭代呢?

我们希望找到最快的方式快速到底谷底,那么我们的方法自然是找最陡峭的方法下去。


这个里面v是一个单位向量,表示我们滚动的方向,而η是滚动的步数是多少。

我们想要使得,我们滚出这一步以后我们的误差Ein尽可能的变小,我们需要怎么做呢?

我们这样想,取一小段考虑,曲线可以看成,一段直线

那么有下面这个式子


这里怎么理解呢?

我们不妨放到一个二维坐标来理解,比如一个二次函数,是个曲线,现在在x轴上,我们移动了ηv,那么y轴上的改变,以及这两点的连线,连接起来是个三角形把,因为两点的连线在y轴上是曲线,假设当我们取一小段考虑,那么就可以看做直线,所以y改变的距离=x的改变*斜率。这些拓展到N维就是向量和梯度了。

所以,接下来,用让这个Ein减少得最快,就要使得后面部分尽量小,所以v这个单位向量的方向是我们需要考虑的,显然当v和梯度是反方向的时候,是最小的,为-1,两个向量的内积最小为-1,所以自然滚动的方向是梯度的反方向。

所以我们有


因为v是梯度反方向的单位向量,所以用负梯度除以梯度的长度来表示。

那么我们接下来要考虑,怎么设置η,显然,η太小太慢,η太大,直接跳过谷底,因为我们前面的推导基于一小步考虑的, 如果太大显然不满足。

所以在很陡的地方下降越快,所以我们考虑η和梯度大小呈正比。


假设是个正比例函数,假设===

那么η=c*|梯度|

那么c=η/梯度,那么可以用c替换掉原式中的η/梯度。

最后表达式中c还是写成η

那么得到


然后更新===迭代===



0 0
原创粉丝点击