![cbbd1c7073f144c8a619896fc024024e.png](https://i-blog.csdnimg.cn/blog_migrate/3651979d9664724063f7afc60e08cd0d.jpeg)
1. 回归简介
在客观世界中普遍存在着变量与变量之间的关系。变量之间的关系一般可以分为确定关系和不确定关系。确定关系是指变量之间的关系可以通过函数关系来表达。非确定关系即所谓的相关关系。而回归分析是研究非确定关系的方法,可以帮助我们从一个或一系列变量的值去估计另一个变量的值。
线性回归模型为
通过最小化损失函数
求得最优的
2. 回归模型
线性回归
线性回归求解
对损失函数求导
令导数等于0,得
解得
其中
def
局部加权回归
线性回归容易出现欠拟合的现象,因为它求的是具有最小均方差的无偏估计。为了解决这一问题,局部加权回归在待预测点附近的每一个点赋予一定的权重,然后在这个自己是基于最小均方差来进行普通的回归分析。对于局部加权回归来说其损失函数为
和线性回归类似,对损失函数求导,然后令导数为零可得
对于局部加权回归的权重
局部加权回归代码:
def
岭回归
在做回归分析时,有时候特征维度比样本数量多,此时输入的特征矩阵不是满秩的,因此不存在其逆矩阵。为了解决这个问题,岭回归在矩阵
和线性回归类似,对损失函数求导,然后令导数为零可得
岭回归代码如下:
def
Lasso回归
Lasso与岭回归类似,Lasso回归也是在损失函数上增加正则化项。但是Lasso正价的是L1正则化项,即
由于L1范数采用的是绝对值导致Lasso不是处处可导的,因此不能使用梯度下降或者牛顿法来求解。这里使用坐标下降法求得最优的
坐标下降法可以得到闭式解
其中
Lasso回归代码:
def
逐步线性回归
逐步线性回归和Lasso算法类似,它采用贪心算法,每一次所做的决策是对权重增加或者减少一个很小的值。
逐步线性回归代码如下:
def
3. 总结与分析
线性回归分析的内容还是蛮多的,其中很多方法都有相应的改进算法,这里值介绍了它们的基础算法。最后贴一下本文实现的线性回归与Sklearn检测性能的比较。
![c3661e90f8096c2155cc4e095e8ae880.png](https://i-blog.csdnimg.cn/blog_migrate/2c838d46e33ef51be27acb276ffe811b.jpeg)
![a4ebc16b71b35295061bbd588b686fac.png](https://i-blog.csdnimg.cn/blog_migrate/e6eb3874cce795c67af6c31af7e974b7.jpeg)
![38f561beac9b2c61e3e389b86402613b.png](https://i-blog.csdnimg.cn/blog_migrate/374c72ccd9ac7cbbde7ea48a18fa88b5.png)
发现两者运行时间差不多,但是Sklearn的回归效果要好一些,本文的到后来就飘了。
本文相关代码和数据集:
https://github.com/Ryuk17/MachineLearninggithub.com参考文献:
[1] 【机器学习】一文读懂正则化与LASSO回归,Ridge回归
[2] Peter Harrington, Machine Learning IN ACTION