您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

最详细的回归算法介绍,一遍就能看懂

时间:2020-08-06 13:34:13  来源:  作者:

Regression:Case Study

回归-案例研究

问题的导入:预测宝可梦的CP值

Estimating the Combat Power(CP) of a pokemon after evolution

我们期望根据已有的宝可梦进化前后的信息,来预测某只宝可梦进化后的cp值的大小

确定Senario、Task和Model

Senario

首先根据已有的data来确定Senario,我们拥有宝可梦进化前后cp值的这样一笔数据,input是进化前的宝可梦(包括它的各种属性),output是进化后的宝可梦的cp值;因此我们的data是labeled,使用的Senario是Supervised Learning

Task

然后根据我们想要function的输出类型来确定Task,我们预期得到的是宝可梦进化后的cp值,是一个scalar,因此使用的Task是Regression

Model

关于Model,选择很多,这里采用的是Non-linear Model

设定具体参数

: 表示一只宝可梦,用下标表示该宝可梦的某种属性

:表示该宝可梦进化前的cp值

: 表示该宝可梦是属于哪一种物种,比如妙瓜种子、皮卡丘...

:表示该宝可梦的hp值即生命值是多少

: 代表该宝可梦的重重量

: 代表该宝可梦的高度

: 表示我们要找的function

: 表示function的output,即宝可梦进化后的cp值,是一个scalar

最详细的回归算法介绍,一遍就能看懂

 

Regression的具体过程

回顾一下machine Learning的三个步骤:

  • 定义一个model即function set
  • 定义一个goodness of function损失函数去评估该function的好坏
  • 找一个最好的function

Step1:Model (function set)

如何选择一个function的模型呢?毕竟只有确定了模型才能调参。这里没有明确的思路,只能凭经验去一种种地试

Linear Model 线性模型

y代表进化后的cp值,代表进化前的cp值,w和b代表未知参数,可以是任何数值

根据不同的w和b,可以确定不同的无穷无尽的function,而这个抽象出来的式子就叫做model,是以上这些具体化的function的集合,即function set

实际上这是一种Linear Model,但只考虑了宝可梦进化前的cp值,因而我们可以将其扩展为:

====

x~i~: an attribute of input X ( x~i~ is also called feature,即特征值)

w~i~:weight of x~i~

b: bias

最详细的回归算法介绍,一遍就能看懂

 

Step2:Goodness of Function

参数说明

:用上标来表示一个完整的object的编号,表示第i只宝可梦(下标表示该object中的component)

:用表示一个实际观察到的object输出,上标为i表示是第i个object

注:由于regression的输出值是scalar,因此里面并没有component,只是一个简单的数值;但是未来如果考虑structured Learning的时候,我们output的object可能是有structured的,所以我们还是会需要用上标下标来表示一个完整的output的object和它包含的component

最详细的回归算法介绍,一遍就能看懂

 

Loss function 损失函数

为了衡量function set中的某个function的好坏,我们需要一个评估函数,即==Loss function==,损失函数,简称L;loss function是一个function的function

input:a function;

output:how bad/good it is

由于,即f是由b和w决定的,因此input f就等价于input这个f里的b和w,因此==Loss function实际上是在衡量一组参数的好坏==

之前提到的model是由我们自主选择的,这里的loss function也是,最常用的方法就是采用类似于方差和的形式来衡量参数的好坏,即预测值与真值差的平方和;这里真正的数值减估测数值的平方,叫做估测误差,Estimation error,将10个估测误差合起来就是loss function

如果越大,说明该function表现得越不好;越小,说明该function表现得越好

最详细的回归算法介绍,一遍就能看懂

 

Loss function可视化

下图中是loss function的可视化,该图中的每一个点都代表一组(w,b),也就是对应着一个function;而该点的颜色对应着的loss function的结果L(w,b),它表示该点对应function的表现有多糟糕,颜色越偏红色代表Loss的数值越大,这个function的表现越不好,越偏蓝色代表Loss的数值越小,这个function的表现越好

比如图中用红色箭头标注的点就代表了b=-180 , w=-2对应的function,即,该点所在的颜色偏向于红色区域,因此这个function的loss比较大,表现并不好

最详细的回归算法介绍,一遍就能看懂

 

Step3:Pick the Best Function

我们已经确定了loss function,他可以衡量我们的model里面每一个function的好坏,接下来我们要做的事情就是,从这个function set里面,挑选一个最好的function

挑选最好的function这一件事情,写成formulation/equation的样子如下:

,或者是

也就是那个使最小的或,就是我们要找的或(有点像极大似然估计的思想)

最详细的回归算法介绍,一遍就能看懂

 

利用线性代数的知识,可以解得这个closed-form solution,但这里采用的是一种更为普遍的方法——==gradient descent(梯度下降法)==

Gradient Descent 梯度下降

上面的例子比较简单,用线性代数的知识就可以解;但是对于更普遍的问题来说,gradient descent的厉害之处在于,只要是可微分的,gradient descent都可以拿来处理这个,找到表现比较好的parameters

单个参数的问题

以只带单个参数w的Loss Function L(w)为例,首先保证是可微

我们的目标就是找到这个使Loss最小的,实际上就是寻找切线L斜率为0的global minima最小值点(注意,存在一些local minima极小值点,其斜率也是0) 有一个暴力的方法是,穷举所有的w值,去找到使loss最小的,但是这样做是没有效率的;而gradient descent就是用来解决这个效率问题的 * 首先随机选取一个初始的点 (当然也不一定要随机选取,如果有办法可以得到比较接近的表现得比较好的当初始点,可以有效地提高查找的效率) * 计算在的位置的微分,即,几何意义就是切线的斜率 * 如果切线斜率是negative负的,那么就应该使w变大,即往右踏一步;如果切线斜率是positive正的,那么就应该使w变小,即往左踏一步,每一步的步长step size就是w的改变量 w的改变量step size的大小取决于两件事 * 一是现在的微分值有多大,微分值越大代表现在在一个越陡峭的地方,那它要移动的距离就越大,反之就越小; * 二是一个常数项η,被称为==learning rate==,即学习率,它决定了每次踏出的step size不只取决于现在的斜率,还取决于一个事先就定好的数值,如果learning rate比较大,那每踏出一步的时候,参数w更新的幅度就比较大,反之参数更新的幅度就比较小 如果learning rate设置的大一些,那机器学习的速度就会比较快;但是learning rate如果太大,可能就会跳过最合适的global minima的点 * 因此每次参数更新的大小是 η,为了满足斜率为负时w变大,斜率为正时w变小,应当使原来的w减去更新的数值,即 ηηηη

此时对应的斜率为0,我们找到了一个极小值local minima,这就出现了一个问题,当微分为0的时候,参数就会一直卡在这个点上没有办法再更新了,因此通过gradient descent找出来的solution其实并不是最佳解global minima

但幸运的是,在linear regression上,是没有local minima的,因此可以使用这个方法

最详细的回归算法介绍,一遍就能看懂

 

两个参数的问题

今天要解决的关于宝可梦的问题,是含有two parameters的问题,即

当然,它本质上处理单个参数的问题是一样的

  • 首先,也是随机选取两个初始值,和
  • 然后分别计算这个点上,L对w和b的偏微分,即 和
  • 更新参数,当迭代跳出时,对应着极小值点 ηηηηηη

实际上,L 的gradient就是微积分中的那个梯度的概念,即

可视化效果如下:(三维坐标显示在二维图像中,loss的值用颜色来表示)

横坐标是b,纵坐标是w,颜色代表loss的值,越偏蓝色表示loss越小,越偏红色表示loss越大

每次计算得到的梯度gradient,即由和组成的vector向量,就是该等高线的法线方向(对应图中红色箭头的方向);而ηη的作用就是让原先的朝着gradient的方向即等高线法线方向前进,其中η(learning rate)的作用是每次更新的跨度(对应图中红色箭头的长度);经过多次迭代,最终gradient达到极小值点

注:这里两个方向的η(lear