大家早安、午安、晚安,一起来学习机器学习算法中回归部分的方法啦,每次都是满满的干货,大家看的时候多喝水哈,正文开始!
回归分析(Regression Analysis)-定义与分类
回归分析(Regression Analysis)是一种统计学上分析数据的方法,目的在于了解两个或多个变数间是否相关、相关方向与强度,并建立数学模型以便观察特定变数来预测研究者感兴趣的变数。更具体的来说,回归分析可以帮助人们了解在只有一个自变量变化时因变量的变化量。一般来说,通过回归分析我们可以由给出的自变量估计因变量的条件期望。回归分析是建立因变数 Y(或称依变数,反应变数)与自变数 X(或称独变数,解释变数)之间关系的模型。
回归分析的主要算法包括:线性回归(Linear Regression)、逻辑回归(Logistic Regression)、多项式回归(Polynomial Regression)、逐步回归(Step Regression)、岭回归(Ridge Regression)、套索回归(Lasso Regression)、弹性网回归(ElasticNet)等。
接下来就分别学习下以上的回归方法
1、基于最小均方误差求解回归参数(最小二乘法,ordinary least squares)
线性回归通常是人们在学习预测模型时首选的技术之一。在这种技术中,因变量是连续的,自变量可以是连续的也可以是离散的,回归线的性质是线性的。线性回归使用最佳的拟合直线(也就是回归线)在因变量(Y)和一个或多个自变量(X)之间建立一种关系。用一个方程式来表示它,即Y=a+b*X + e,其中a表示截距,b表示直线的斜率,e是误差项。这个方程可以根据给定的预测变量(s)来预测目标变量的值。通常使用最小二乘法来获取拟合曲线中的回归参数。最小二乘法对于观测数据,它通过最小化每个数据点到线的垂直偏差平方和来计算最佳拟合线。
线性回归实例编程实现
1)准备数据:
备注:图3中的代码中,info是从文件中读入的数据,类型是字符串,所以,需要用dtype=float将其转换为数字形式
2)准备线性回归算法,并将原始数据点和拟合后的曲线绘制出来
计算到这里,我感觉很多朋友要提问了,1)基于图2中的最小二乘法来求解平方误差时,若xTx不存在逆矩阵怎么办?2)当数据量很大时,求解矩阵乘法及其逆矩阵,是不是很困难呢?3)如何判断模型拟合的效果,是否出现欠拟合和过拟合?...接下来的内容会逐步解决哈(备注:先给出欠拟合和过拟合的直观展示)
2、局部加权线性回归(Locally weighted linear regression, LWLR)
观察上图6中不同的拟合程度可以发现,对特征的不同把握程度,将影响曲线的拟合程度。图6中的欠拟合现象,表明没有明确的把握数据结构关系;而过拟合现象,则是太过于沉溺于符合训练数据,太沉溺与每个细节,导致没有把握全局数据走向,不能很好的预测待测试的数据。针对欠拟合现象,局部加权线性回归算法应运而生。
其实,在预测某一个数据点时,它周围的点对预测他的取值的参考性要更加大,因此,可以考虑加重这个带预测值周围点的权重。这就是局部加权线性回归算法的基本思想,用式子可以表示为:
接下来,再看一个局部加权线性回归的栗子
因为,不同的k会影响最终的预测值y,所以,可以对比不同的k的拟合效果,观察是否欠拟合或者过拟合。
备注:在这个画图中,需要先对数据进行排序,否则画面太美,不忍直视,经验之谈,捂脸
不难发现,k=0.25之前,处于欠拟合的状态;k=0.01及更小的数值时,效果难以直视,过拟合太严重;k=0.15左右时效果还行。因此,k的选择很重要。
以上,局部加权线性回归算法较好的解决了欠拟合的现象,但是它增加了一定的计算量,同时,如何确定k也需要在实际应用中好好测试。
最小二乘法、局部加权线性回归方法都基于X_T*X存在逆矩阵,也就是他是满秩矩阵,实际表示这些特征值之间不相关。辣么,如果特征内,有一些特征是相关的,那么势必造成特征矩阵的非满秩,此时|X_T*X|趋于0,无法进行后面的回归参数的计算。肿么办,接下往下看~
3、岭回归(Ridge Regression)
如果数据的特征的数目比样本的数目还多,那么输入数据的矩阵X将不是满秩矩阵(可以认为是列向量也就是特征值之间具有相关性)。非满秩矩阵不存在逆矩阵,也就是出现了我们上面一直强调的问题。上面提到的两种方法都用不上了。岭回归赶来帮忙啦。
在图11中,w叫做岭回归估计,λ为岭参数,以w的函数为因变量,以k为自变量,构成了岭迹图。岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘法,通过放弃最小二乘法的无偏性,损失部分信息、降低精度为代价获得回归系数更为符合实际、更为可靠的回归方法,对共线性数据的拟合要强于最小二乘法。岭回归中回归系数的来源是通过最优化下列模型来得到的(β就是图11中的w):
先看一下岭回归的编程实现。
1)准备数据
2)岭回归系数的计算
备注:在计算岭回归参数之前,需要将数据进行标准化。在此过程中,将λ进行指数级的变化,从e^-10~e^20。下面的图表示岭回归估计与λ对数的关系。
当λ为0时,结果跟普通意义的多元线性回归的最小二乘解完全一样;在λ较小时,各个回归系数比较大;当λ增大时,各个回归系数取值迅速减小,即从不稳定趋于稳定。上图中类似喇叭形状的岭迹图,一般存在多重共线性。(因为有8个特征值,所以回归系数之也有8个,对应8条曲线)
λ选择:一般通过观察,选择喇叭口附近的值,此时各个回归系数趋于稳定,而且预测值与实际值的平方误差不太大。但是也不能选太大的λ,因为,上图中,貌似随着λ的增大,回归系数的取值大小趋于稳定,但是实际对应的平方误差已经非常大了。为了定量地找到最佳参数值,还需要进行交叉验证。另外,要判断哪些变量对结果预测最有影响力,可以观察上图中对应系数的大小。
关于上述λ的变化,我觉得知乎上一个大牛解释的值得参考,我截个图:
我觉得图15中知乎大牛的解释,可能较好的说明了图14中粉色和黄绿色曲线代表的回归参数的取值变化。当然,如果理解的不对,请大牛告知一下,非常感谢。
既然上述提到岭回归中的岭参数比较难确定,辣么,是不是有改进的方法呢?
4、套索方法(Lasso,The Least Absolute Shrinkage and Selection Operator)
机器学习实战中书表示:在增加如下图16约束时,普通的最小二乘法回归会得到与岭回归的一样的公式:
上式限定了所有回归系数的平方和不能大于λ。使用普通的最小二乘法回归在当两个或更多的特征相关时,可能会得出一个很大的正系数和一个很大的负系数。正是因为上述限制条件的存在,使用岭回归可以避免这个问题。与岭回归类似,另一个缩减方法Lasso也对回归系数做了限定,对应的约束条件如下:
Lasso中对回归参数的限制,在λ较小时,一些系数会因此被迫缩减到0,这个特性可以帮助我们更好地理解数据。但在这个新的约束条件下求解回归系数,需要使用二次规划算法,极大的增加了计算复杂度,不太适用。
5、前向逐步回归算法
前向逐步回归算法属于一种贪心算法,即每一步都尽可能减少误差。一开始,所有的权重都设置为1,然后每一步所做的决策是对某个权重增加或减少一个很小的值。
回归算法先写到这里吧,其他回归算法以后接着学,希望对大家有所帮助,也请大牛不吝赐教,谢谢