梯度:在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。 它几何上的意义是:函数变化增加最快的地方。也就是在(x,y)点处沿梯度方向就是增长最快的地方 回归系数的确定: 基于最优化方法的最佳回归系数确定的算法: 梯度上升法算法 梯度上升的思想是:要找到某函数的最大值,最好的方法是沿着该函数的梯度方向探寻。 如果记梯度为▽则函数f(x,y)的梯度由 表达。 这个式子不是要去懂是如何去实现的,要了解这些符号的意思: 表示的是要在沿x的方向上移动 表示的是在沿y的方向上移动 其中f(x,y)必须要在计算的点上有定义且可微。 一个具体的例子: 梯度上升算法是每到达一个点就重新估计运行的方向。 在从P0点开始,计算完该点的梯度,函数会根据该点的梯度继续移动,在到达P1点时再次重新计算在P1点梯度,然后沿着该梯度向P2点移动,直到运行到满足条件的位置。 这样就能确保每次都是沿着最佳的方向移动。 梯度算子总是指向函数值增长最快的方向。移动量的大小称为步长,记为α。 迭代公式为: 该公式一直被迭代使用,直到满足特定的条件为止。 训练算法:使用梯度上升找到最佳参数 梯度上升的伪代码: 每个回归系数初始化为1 重复R次: 计算整个数据集的梯度 使用alpha*gradient更新回归系数的向量 返回回归系数 梯度上升算法的局限性:他只能处理100左右的数据集,但是要是涉及成千上万次的特征值时,使用该算法的时间复杂度就会很高。
1 | import numpy as np |
结果: 详细的代码运行过程,可以通过debug自行去了解,这里我推荐使用spyder 它的debug调试过程能够清楚的看到每个数据。