线性回归
解析式求解:
线性回归解析式解Python代码实现
局部加权线性回归
局部加权线性回归(Locally Weighted Linear Regression,LWLR)。在该算法中,我们给待预测点附近的每个点赋予一定的权重;然后在这个子集上基于最小均方差来进行普通的回归。与kNN一样,这种算法每次预测均需要事先选取出对应的数据子集。
该算法解出回归系数w的形式如下:
其中w是一个矩阵,用来给每个数据点赋予权重。
LWLR使用“核”(与支持向量机中的核类似)来对附近的点赋予更高的权重。核的类型可以自由选择,最常用的核就是高斯核,高斯核对应的权重如下:
这样就构建了一个只含对角元素的权重矩阵w,并且点x与x(i)越近,w(i,i)将会越大。参数k决定了对附近的点赋予多大的权重,则也是使用LWLR时唯一需要考虑的参数。
下面是参数k与权重的关系:
局部加权线性回归解析式解Python代码实现
局部加权线性回归的问题在于,每次必须在整个数据集上运行,也就是说为了做出预测,必须保存所有的训练数据。
岭回归和逐步线性回归
岭回归最先用来处理特征数多于样本数的情况,现在也用于在估计中加入偏差,从而得到更好的估计。这里通过引入lamda来限制了所有w之和,通过引入该惩罚项,能够减少不重要的参数,这个技术在统计学中也叫做缩减(shrinkage)。
岭回归中的岭是什么?
岭回归使用了单位矩阵乘以常量lamda,最先是用来处理特征数多于样本数的情况,我们观察其中的单位矩阵I,可以看到值1贯穿整个对角线,其余元素全是0。形象地,在0构成的平面上有一条1组成的“岭”,这就是岭回归中的“岭”的由来。
岭回归解析式解Python代码实现
岭回归的回归系数变化图
这里的lambda应以指数级变化,这样可以看出lambda在取非常小的值时和取非常大的值时分别对结果造成的影响。
还有一些其他缩减方法,如lasso、LAR、PCA回归以及子集选择等。与岭回归一样,这些方法不仅可以提高预测精确率,而且可以解释回归系数。
在增加如下约束时,普通的最小二乘法回归会得到与岭回归的一样的公式:
上式限定了所有回归系数的平方和不能大于lambda。使用普通的最小二乘法回归在当两个或更多的特征相关时,可能会得出一个很大的正系数和一个很大的负系数。正是因为上述限制条件的存在,使用岭回归可以避免这个问题。
与岭回归类似,另一个缩减方法lasso也对回归系数做了限定,对应的约束条件如下:
唯一的不同点在于,这个约束条件使用绝对值取代了平方和。虽然约束形式只是稍作变化,结果却大相径庭:在lambda足够小的时候,一些系数会因此被迫缩减到0,这个特性可以帮助我们更好地理解数据。这两个约束条件在公式上看起来相差无几,但细微的变化却极大地增加了计算复杂度(为了在这个新的约束条件下解出回归系数,需要使用二次规划算法)。
前向逐步回归
前向逐步回归属于一种贪心算法,即每一步都尽可能减少误差。一开始所有的权重都设为0,然后每一步所做的决策是对某个权重增加或减少一个很小的值。
该算法的伪代码如下所示:
前向逐步回归python代码实现
逐步线性回归,主要的优点在于它可以帮助人们理解现有的模型并做出改进。当构建了一个模型后,可以运行该算法找出重要的特征,这样就有可能及时停止对那些不重要特征的收集。
当应用缩减方法(如逐步线性回归或岭回归)时,模型也就增加了偏差(bias),与此同时却减少了模型的方差。
权衡偏差与方差
误差由三个部分组成:偏差、误差和噪声。