- 线性回归
线性回归中的数学知识
在线性回归中,最重要的莫过于在一大堆的数据中找回归方程
![5fe148fb146ca3d97c24550fd6641226.png](https://img-blog.csdnimg.cn/img_convert/5fe148fb146ca3d97c24550fd6641226.png)
比较简单的方法是,可以利用最小二乘法寻找误差最小的那条直线.
利用最小二乘法计算loss可以写为:
![5ed9d4356b63e64ec433af1dc56fe4af.png](https://img-blog.csdnimg.cn/img_convert/5ed9d4356b63e64ec433af1dc56fe4af.png)
为了找到loss最小的那条直线,我们可以对w求导,得到
![8f26bb1f4959f5d1de51f7b715943720.png](https://img-blog.csdnimg.cn/img_convert/8f26bb1f4959f5d1de51f7b715943720.png)
![5d1f8420b93c7efc652f58d61ee1f8dd.png](https://img-blog.csdnimg.cn/img_convert/5d1f8420b93c7efc652f58d61ee1f8dd.png)
因此求回归方程转变为求参数w.
实现代码
def standRegres(xArr,yArr): xMat=np.mat(xArr) yMat=np.mat(yArr).T xTx=xMat.T*xMat if np.linalg.det(xTx)==0.0: print('error') return ws=xTx.I*(xMat.T*yMat) return ws
求出参数w
将回归直线去拟合实际数据
import matplotlib.pyplot as pltfig=plt.figure()ax=fig.add_subplot(111)ax.scatter(xMat[:,1].flatten().A[0],yMat.T[:,0].flatten().A[0])xCopy=xMat.copy()xCopy.sort(0)yHat=xCopy*wsax.plot(xCopy[:,1],yHat)plt.show()
![af6f32f4e93c42383bcaa73af093d3d3.png](https://img-blog.csdnimg.cn/img_convert/af6f32f4e93c42383bcaa73af093d3d3.png)
可以看到虽然直线显示了大概的趋势,但并不能很好的去拟合数据,下面介绍一种强大的回归--""局部加权线性回归