局部加权线性回归算法原理分析和代码实战
前言
前面我们介绍了最基础的线性回归算法,也提到了它容易出现欠拟合的现象。那么,本文的局部加权线性回归将解决这个欠拟合问题。我觉得这个思路具有很好的迁移性,咱们一起好好看看。
项目源码已上传至GitHubb上,有需要的自取:项目地址
如果项目对你有些许帮助,不要忘记给个小⭐⭐
算法原理分析
1. 什么叫局部加权?
使用“近朱者赤,近墨者黑”来形容这个算法再合适不过了。在你的社交圈子里,离你距离越近,对你的影响就越大,离你距离越远,对你的影响越小。我们以每一个数据为一个社交中心,对于存在于该数据周围的所有数据按照距离赋予权值,这里我们使用高斯函数进行权值计算。
2. 什么是高斯核函数?
也称径向基函数,简称RBF,定义为空间中任意一点xi到x之间欧氏距离的单调函数。当两个点距离很近时,这个值越大,当两个点距离很远时,距离很小。我们就使用这个函数来对数据赋予权值。
数据集普遍都具有很多属性,所以一般的高斯核函数如下:
σ表示属性值的方差
由于我们本次使用的数据集只有一个属性,并且我们需要自己控制拟合程度,所以,我们对于上面的式子做出了一点改进:
这个w权值是一个方阵,其形状大小有数据量决定。我们假设有m条数据量,那么w权值的形状大小为(mxm)的方阵。
此方阵对角线存放权值,其余全是0,这样弄的原因是为了计算表示的方便,我们看下面的式子:
接下来我以数据点x[0]= [1.0, 0.42781]为数据中心点,对整个数据集计算权值,生成的图像如下:
从图像我们可以看到,接近于0.4281的地方都比较高,都比较接近于1,离这个点越远,其值就越小。
3. 加入权值后的线性回归公式
下面公式是在上一篇博客的公式推导基础上,进行改进的。如果没有看过,建议先去大致看一眼
- 最小均方差公式:
- 化简形式
- 对F进行求导,得出α的表达式
局部加权线性回归代码实战
- 加载数据
首先我们先看一下文本数据的属性有哪些
图中最坐标红色方块是数据的常数1,用来求解常量,对应着就是我们前面公式的b。
中间黄色的是我们的属性值α1.
最右边白色的是我们数据的值,也就是y值。
我们来看一下数据的分布情况:
def LoadData(filename):
dataMat = []
labelMat = [