美文网首页
Lectrue1 Regression

Lectrue1 Regression

作者: 带带吴腾跃 | 来源:发表于2019-11-03 19:41 被阅读0次

regression:指研究一组随机变量(Y1 ,Y2 ,…,Yi)和另一组(X1,X2,…,Xk)变量之间关系的统计分析方法。
回归能干嘛?


image.png

一个例子:预测宝可梦进化后的CP值


image.png

step1:建立model

假设进化后的CP值由这个model得出:


image.png

这样的model可以有多少个呢?
由于b 和 W 可以为任意数,所以这样的model有无穷多个,构成一个model集合,但显然有些参数是不符合实际情况的,例如b和W都为负数。

上述model是一个linear model 什么是linear model?简单来说就是可以写成如下函数表达式的模型,函数图像能用一条线表示。Xi表示输入X的一个attribute,Wi表示权重,b表示bias,偏置。

image.png

step2:寻找function

现在我们抓来了10只宝可梦,编号1到10。


image.png

然后我们把收集到的这10只宝可梦的进化前的cp值和进化后的cp值在坐标系上画出来。


image.png

由于我们的model也就是function集合里有很多function,那么如何判断哪个function是最好的呢?这时我们需要另外设定一个Loss function L,他的input是一个function,output是一个数值,说明吃进去的function有多不好。

image.png
用L来衡量f的好坏,由于f只是w,b的不同,所以就等于衡量w,b的值的好坏。
那么怎么来定义损失函数L呢?可以根据喜好,但一般的定义是:
image.png
意思是用每一只宝可梦的实际cp值减去预测cp值的差的平方全部相加,称作估错误差,此误差越大说明input的f越差。

step3:寻找最好的function

只要找到一个f让L的值最小,那么这个f就是最好的function。公式如下:

image.png
但是问题又来了,怎么解上述function?一个好的办法就是梯度下降法 Gradient Descent,只要L是可微分的,都可以拿来处理。

Gradient Descent

现在我们举一个简单的例子,只考虑一个参数w的loss function,我们需要找到w取何值时function结果最小? image.png

一个简单暴力的方法就是穷举,把所有的w从负无穷到正无穷都带入到L中看哪个结果最小。
但这样做效率太慢。梯度下降法是怎么找出最低点的呢?


image.png

开始随机初始一个w0点,计算他的微分,也就是切线的斜率,如果斜率是负的,那么说明左边高右边低,所以此时应该增加w的值,如果斜率是正的,说明左边低右边高,所以此时应该减少w的值。
上述例子中应增加w的值,那么应该增加多少呢?
取决于两个元素:

  • 1.如果此时的斜率越大,说明越陡峭,则移动的距离就越大,若斜率越小,则移动的距离就越小。
  • 2.还取决一个常数项 η(事先定好的数值),称为learning rate
    上述例子中,我们应向右移动,移动的长度为η·w0的斜率.
    所以新的点w1 = w0 + η·w0的斜率
    image.png
    然后一直重复上述的步骤,不断进行下去,最终将到达一个低谷,称为Local optimal 局部最优值,此点的微分为0,所以参数就不会再更新下去。所以有可能找不到全局最优解,但这个问题在regression中不是问题,因为在linear regression 线性回归上是没有局部最小值的。
    image.png

那如果是有两个参数呢?How about two parameters?
其实跟一个参数是相同的,我们初始随机选择两个参数,一个为w0,一个为b0,分别计算w=w0时L对w0的偏微分,b=b0时L对b0的偏微分,然后分别更新w0参数得到w1,更新b0得到b1,反复重复此步骤。

拓展:两个参数的偏微分组成的向量,就是Gradient 梯度。


image.png

两个参数的函数图像为三维,如下图。


linear regression图像

红色箭头其实就是等高线的法线方向。
但是梯度下降法有一个让人担心的地方,如果你的function长得是这样子?


image.png

但是在linear regression不需要但系这个问题,因为他没有局部最优解。

结果怎么样?

最终得出的结果 b = -188.4 w = 2.7,我们将此函数画出。


image.png

现在我们再抓新的10只宝可梦来测试这个model。

image.png

得出我们的训练误差为35.0 也就是每个点到红线的距离之和。
有没有办法做的更好?
我们重新设计一个model,表达式如下:


image.png
方法还是如上,最终结果 image.png image.png

可见,效果比第一个model更好!
让我们再次优化上述model,我们再加入三次方。


image.png

结果:


image.png image.png

我们发现,这个模型仅仅比上一个模型好那么一点点。让我们再将model变得更复杂一点。

image.png
image.png

此时我们的误差为14.9,但是拿新的10只宝可梦来测试发现误差达到了28.8,结果竟然变得更差了!


image.png
将模型再变得复杂一点!
image.png

此时我们会得到这么一张图像:


image.png
可见,为了使10只训练的宝可梦达到误差最小,图像竟然成了这个样子!但这个图像符合真实情况吗?如果用这个model来测试新的10只宝可梦,那结果却错的离谱!

到此,我们总结以下,如果把以上五个模型在训练集上的所有误差值画成一个图像,将得到以下图像:

image.png
但是在测试集上的结果却如下图: image.png
所以我们的结论,虽然越复杂的model在train data上能得到更好的结果,但是在test data上却不一定得到好的结果,这个现象就叫做Overfitting 过拟合,所以我们应选一个不需要太复杂对测试集结果也刚刚好的model!由上图所只,对于这个例子我们应该选第三个model!

如果我们再多抓一点宝可梦呢?那么我们会发现之前的model又烂掉了,你会得到如下的规律图像:

image.png
所以设计model时候只考虑cp值是不够的,因为cp值受物种的很大影响,所以我们需要重新设计一下model了。
那么我们的model应该是这样子的:
image.png
对于不同的物种,我们就应该用不同的function,但问题又来了,这么多function,还能算linear function吗?该如何求微分呢?其实只要改下一下形式就能表示!
image.png
最重要的 δ 参数,意思是如果括号内的等式成立,那么他就为 1,否则就为0
当我们考虑到宝可梦分类,也就是 feature时,得到的结果如下:
image.png
可见效果比之前的都要更好,但是有几个点还是离直线有点距离,造成这个现象也是有许多可以解释的原因的,比如说宝可梦进化时会加一个随机的值?或者进化后的CP值跟进化前hp有关?身高有关?又或体重有关?但具体是什么原因我们不得而知。
image.png
没关系,我们还有一招,就是把你所有觉得有关的feature都加进去
image.png
先对每个种类用不同的function,后再加上hp的参数,身高的参数以及体重的参数。此时这个模型看起来已经够完美了吧,这个模型在训练集上的误差只有1.9,但对于测试集,结果又爆掉了,误差竟然到了102.3。显示又是过拟合了。
image.png
此时我们该怎么办呢?此时我们又引入一个新的方法,叫做regularization

Regularization 正则化

此方法是重新定义我们当初的Loss function,我们原来的Loss function只考虑了误差这一件事,现在我们把L改下成如下:

image.png
此时如果想让我们的L得到的结果最小,那么wi的值就应该很小,此时我们的function图像是更平滑的。为什么更平滑的会更好呢?这意味着这个function对输入的变化不敏感,因为如果输入xi出现变化,但wi很小,所以最后的结果y也不会差的很多。这样如果一些noise干扰到我们的输入,那么这个function受到的干扰程度会很小。

正则化后的模型结果如下:

image.png
如果λ,越大,说明function越平滑,但太平滑也不好,因为太平滑就是一条直线了,什么也干不成,所以我们需要一个合适的wi和一个合适的λ不能太看重wi也不能太看重function的平滑程度,由上图可以看出,此时我们选λ=100时效果最好。

相关文章

网友评论

      本文标题:Lectrue1 Regression

      本文链接:https://www.haomeiwen.com/subject/xzflbctx.html