线性回归:
假设h(x)=y,有大量样本,求h(x)是什么。
那么可以假设
为了方便,这里先记只有
假设实际结果为y,y=f(x)
那么,h(x)在什么情况下最接近f(x)呢?
那大量样本(m组样本)呢?
我们给
做一个平方,保证它为正,为正了以后,就是求最小了对吧。方便很多:然后把这些样本相加:
这个相加后的值最小的时候,就是我们的假定函数h(x)最接近实际函数f(x)的时候。 由于方程中没有f(x),而f(x)=y,所以方程可以写为:
假设我们有m个样本,那么我们的目标就是:计算这些样本下,找到至少一个
和 的值,使得在这个值下,样本所有结果得到的偏差最小。现在我们有两个方程:我们的目标就是,找到至少一个
和 的值,使得 最小,这个值下得到的函数 就是最接近真实函数的假定函数。实际操作很简单……
假设这个
那么当这个函数
最小的时候,就是我们得到 的时候。具体做法叫做“梯度下降”
对方程
当
当
(注意,求导的意思是,得到一个微小变量,所以上面的
那么,因为我们的目标是要得
具体做法是,分别对于
和 , ,使得 不断重复,直到再也找不到一个 (或者找到的 太小可以忽略不计)使得 ,那么此时的 和 的值就是我们想要的。使得 最小的值。这时候得到的 ,就是我们想要的最接近目标函数的假定函数。具体做法如下: 分别对于
控制重复的方法很多。比如可以每次计算
和上一次的 的差值( ),如果两次得到的差值>0,也就是变化方向反了,那就控制函数改方向(改变 的值,加个+号或者-号)。如果每次计算都得到的差值都很奇怪,比如一下大一下小,一下正一下负,可能是控制幅度太大,缩小 的值即可。不断重复直到差值小于一个你觉得合适的极小值。方法很多,不一一枚举。注意:梯度下降,每一次都需要用到所有样本(或者一堆样本,其它用来做测试,但是对于你用到的样本来说,每一次训练依然是用到所有样本。)来训练数据。这叫做“批量梯度下降”。编程的时候不需要用到循环语句,用矩阵相乘,或者向量相乘即可,方便很多。
转载:https://zhuanlan.zhihu.com/p/21340974