用numpy来求线性回归方法及原理

给定点集points(x,y),假定我们要求的回归方程为形如f(x) = w*x+b的一元一次方程形式,那么在w及b确定的情况下每一个x会对应一个估计值f(x),线性回归即为求出最合适的w和b,使得可以根据求出来的回归方程预测函数走势。

先捋一下思路:
假设一个变量为LOSS(损失的意思),LOSS=f(x)-y=w*x+b-y 。那么LOSS的含义便是在你求出来的回归方程下与真实方程的区别。LOSS越小,则回归方程越接近真实方程。
思路分为大体两步:
1.求出每一对w,b下的LOSS的值
2.求出来LOSS值最小的w0,b0

此时的w0,b0便是回归方程的最合适的w,b

我们现在已经知道如何在已知w和b的情况下求出来LOSS,故第一步已经解决,接下来便是如何求出来什么时候LOSS最小。

这时候不得不介绍梯度的概念,梯度意为指向函数升高的方向
如果我们取反梯度,那么便可找到最小值
如下图
在这里插入图片描述
图中这些红色的点的梯度指向旁边下降的方向
那么如果利用梯度来找到最小值呢?
假如上图是y关于x的函数
那么我们知道,如果f '(x)<0,就让x向右,如果f '(x)>0,就让x向左
这样便能找到y=f(x)的最小值

同理,如果我们要找到LOSS关于w,b的最小值
那么就分别对w和对b求导
导数分别为∂LOSS/∂w和∂LOSS/∂b
其中∂LOSS/∂w = ∑2(wxi+b-yi)xi
∂LOSS/∂b = ∑2(w
xi+b-yi)

并使w和b进行如下运算便可使w和b向LOSS最小的方向移动
w’ = w - (∂LOSS/∂w)
b’ = b - (∂LOSS/∂b)

但此时还有一个问题,那便是w和b再进行如上运算时有可能变化范围会很大,那样的话很有可能会使得方程很不准确。
以此,我们便将方程变化为如下格式:
w’ = w - lr * (∂LOSS/∂w)
b’ = b - lr * (∂LOSS/∂b)

其中lr的含义为**(learn rate)学习比例**,一般初始设为0.001或者0.005,之后自己调试看怎么样将LOSS下降到满意的数值为止。

代码如下:在这里插入图片描述
最后输出结果为在这里插入图片描述
其中第一次输出为假设w和b都为0的初始的LOSS值为5565
第二次输出为回归之后的w为0.7037和b为37的LOSS的大小
此时LOSS已经由5565下降到147左右,偏差值缩小了40倍!

发布了4 篇原创文章 · 获赞 5 · 访问量 175

猜你喜欢

转载自blog.csdn.net/qq_15534667/article/details/104979899
今日推荐