引言:线性回归模型的种类有很多,如lasso回归、岭回归及逻辑回归等。同时,根据求解函数的不同,又可以衍生到线性分类。接下来将一一介绍。
回归是一种应用广泛的预测建模技术,这种技术的核心在于预测的结果是连续型变量。通常,我们可以通过矩阵和代数这两个角度来理解模型,在这里,我们采用矩阵的角度来理解。
多元线性回归就是指一个样本有多个特征的线性回归问题,对于有n个特征的i样本而言,它的回归结果可以写成:
w被称为模型的参数,w0为截距,w1~wn被称为回归系数。线性回归的任务,就是构造一个预测函数来映射输入的特征矩阵X和标签值y之间的线性关系。而构造函数的关键就是找出模型的参数向量w。
回想其他机器学习的求解过程,我们都是先定义了损失函数,再通过最小化损失函数/损失函数的某种变化来求解参数向量,以此将单纯的求解问题转化为一个最优化问题。同理,在多元线性回归中,我们的损失函数是用最小二乘法来求得的:
这个损失函数衡量了我们构造的模型的预测结果和真实标签的差异,因此我们希望这个差异越小越好。我们往往称这个式子为RSS残差平方和。
这种通过最小化真实值和预测值之间的RSS来求解参数的方法叫做最小二乘法。
接下来我们对w求导,并令其导数为0,得到w:
我们希望能求解得到w的前提是的逆矩阵必须存在,而逆矩阵存在的条件是其行列式不为0,即矩阵满秩,而满秩的充分必要条件是特征矩阵不存在多重共线性。因此,逆矩阵存在的充分必要条件就是特征矩阵不存在多重共线性。
在sklearn中的参数及含义如下:
可以看出,线性回归的性能,往往取决于数据本身,而非是我们的调参能力,线性回归因此对数据有着较高的要求。
均方误差用来衡量我们预测值和真实值的差异:
在sklearn中,调用方法有:
这里计算的是负均方误差,因为模型在计算时,会考虑指标本身的性质,均方误差本身就是一种误差,因此被sklearn划分为模型的一种损失,并且所有的损失都用负号来表示。
除了MSE,还有MAE这个指标能表示。
除了数据本身的数值大小之外,我们还希望能捕捉到数据的规律,比如数据的分布规律,单调性等。我们使用决定系数R2来表示:
可以看出,分子是真实值和预测值之差的平方,也就是我们的模型没有捕获到的信息总量,分母是真实标签所带有的信息量,所以其衡量的是1-我们的模型没有捕获到的信息量占真实标签中所带的信息量的比例。所以值越接近1越好。
注:R2不一定为正,可能会出现R2为负的存在。说明这个时候模型对数据的拟合能力特别糟糕,模型完全不能使用。此时可以检查建模过程和数据处理过程是否正确,如果预处理没有问题的话,说明线性回归不适合你的数据,此时试试别的算法吧!
多重共线性是指精确相关关系和高度相关关系。多重共线性是一种统计现象,是指模型中的特征之间由于存在精确相关关系或高度相关关系使得模型无法建立,或者估计失真。
而相关性是衡量两个或多个变量一起波动的程度的指标,它可以为正为负或者为0。我们说变量具有相关性,通常是线性相关性,线性相关由皮尔逊相关系数进行衡量,非线性相关由互信息法/斯皮尔曼相关系数衡量。
由上文可知,多重共线性的存在会使模型极大的偏移,无法模拟数据点额全貌,为了解决这一问题,有以下三种方法:
我们的核心是使用第三种方法,为此,一系列的算法,岭回归,Lasso都被研究出来了。接下来将详细介绍。
岭回归,又称为吉洪诺夫正则化。岭回归在多元线性回归的损失函数上加上了正则项,表示为系数w的L2范式乘以正则化系数α。因此,岭回归的损失函数为:
接下来,我们仍然使用最小二乘法对其求导,最终得到w为:
可以看出,α能直接作用于上,使得本不为满秩矩阵的
变成满秩矩阵,从而避免求不出来解的情况。如果我们发现某个α下的模型无法求解,那我们只需要换一个α的取值即可。也就是说,这样的话,矩阵的逆是永远存在的!
如此,正则化系数α也就完美避免了“精确相关关系”带来的影响,当α越大,模型越不容易受到共线性的影响。
注:在机器学习中,我们可以通过模型来判断——如果一个数据集在岭回归中使用各种正则化参数取值下的模型表现没有明显上升(比如持平或者下降),这说明数据没有多重共线性。反之,如果一个数据集在岭回归的各种正则化参数取值下表现出明显的上升趋势,则说明数据存在多重共线性。
我们通过交叉验证来选择最佳的α。在sklearn中,有一个函数RidgeCV,能对不同取值下的α进行交叉验证。
Lasso全称最小绝对收缩和选择算子,这个算法也是被用来创造作用于多重共线性问题的算法,不过Lasso使用的是系数w的L1范式乘以正则化系数α,其损失函数表达式为:
对其求导并进行求解后,得:
可以看出,它无法对造成任何影响,也就说,Lasso无法解决特征之间“精确相关”的问题。我们只能通过增加α,来为w的计算增加一个负项,从而限制参数估计中w的大小,而防止多重共线性引起的参数w被估计过大导致模型失准的问题。因此,Lasso不是从根本上解决多重共线性的问题,而是限制多重共线性带来的影响。
可以看出,L1和L2正则化的一个核心差异就是他们对系数w的影响:两个正则化都会压缩w的大小,对标签贡献更少的特征的系数会更小,也更容易被压缩。不过,L2正则化只会将系数压缩到尽量接近0,而L1主导稀疏性,因此会将系数压缩到0。这个性质,也让Lasso成为了线性模型中特征选择工具首选。
在sklearn中,也有类Lasso和LassoCV类来进行模型求解和α的寻优。但是Lasso对正则化系数的变化过于敏感,因此我们只能让α在很小的空间里变动。因此在LassoCV中,我们定义了一个概念“正则化路径”,用来设定正则化系数的变化:我们把形成这个正则化路径的α的最小值除以α的最大值得到的量称为正则化路径的长度。
值得注意的是,RidgeCV中默认的模型评估指标为R2,但是Lasso默认的评估指标为均方误差。
LassoCV参数及接口如下:
除了解决模型共线性这个核心问题之外,线性模型还有更重要的事情要做:提升模型表现,接下来将介绍为了提升模型表现而做出的改进:多项式回归。
我们常使用的线性是指“变量之间的线性关系”,它表示两个变量之间的关系可以展示为一条直线,即可以使用y=ax+b来拟合。而三角函数,高次函数这些都是非线性函数。
当这些特征分别与标签存在线性关系时,我们就称这一组数据是线性数据。而当特征矩阵中任意一个特征与标签之间的关系需要使用三角函数等函数来进行定义时,我们就称这种数据为“非线性数据”。分类问题中特征与标签[0,1]或者[-1,1]之间关系明显是非线性关系。
在分类数据中,我们使用“是否线性可分”这个概念来划分分类数据集,当分类数据的分布上可以使用一条直线来将两类数据分开时,我们就说数据是线性可分的。
线性模型的特点:其自变量都是一次项;
在实际问题中,其实线性模型可以用来拟合非线性数据,而非线性模型也可以用来拟合线性数据,更神奇的是,有些算法没有模型也可以处理各类数据,而有些模型可以既是线性,也可以是非线性模型!
下面对线性和非线性模型进行总结:
注:在sklearn使用分箱处理非线性问题,相关的类为:from sklearn.preprocessing import KBinsDiscretizer,其中需要将连续变量离散化,分成多少个箱子即多少个类,encode为编码方式,有onehot/ordinal,其中onehot为独热编码:使用做哑变量方式来进行离散化,返回的是稀疏矩阵。
除了分箱以外,另一种用于解决“线性回归只能处理线性数据”问题的手段,就是使用多项式回归对线性回归进行改进。这种手段是从支持向量机中获得灵感的,支持向量机通过升维将非线性数据转化为线性可分,然后使用核函数在低维空间中进行计算,这是一种“高维呈现,低维解释”的思维。
多项式变化,是一种通过增加自变量上的次数,而将数据映射到高维空间的办法,只要我们设定一个自变量上的次数(大于1),就可以相应的获得数据投影在高次方的空间中的结果。这种方法可以通过sklearn中的类PolynomialFeatures来实现。
多项式回归是没有表达式的,这个过程只不过是将原始x上的次方增加,并且为这些次方加上权重W,然后增加一列所有次方为0的列作为截距乘数的x0。
狭义线性模型vs广义线性模型
因此,如果我们考虑广义线性模型的定义,多项式回归就是一种线性模型,毕竟它的系数w之间也没有相乘或者相除。
多项式是一种特殊的线性模型。其主要通过对自变量上的次方进行调整,来为线性回归赋予更多的学习能力,其核心表现在于提升现有模型在数据集上的表现。
逻辑回归的基本表达形式为:
逻辑回归的核心任务是:求解来构建一个能够尽量拟合数据的预测函数y(x),并通过向预测函数中输入特征矩阵来获取相应的标签值y。
长期以来人们都是以“返回概率”的方式来理解逻辑回归,可以说,逻辑回归返回的数字,本质上不是概率,但可以被当成概率来看待和使用。
我们使用损失函数这个评估指标,来衡量参数为θ的模型拟合训练集时产生的信息损失的大小,并以此来衡量参数θ的好坏。(注意:没有“求解参数”需求的模型没有损失函数,比如KNN,决策树)
逻辑回归的损失函数是由极大似然估计推导出来的,具体结果可以写成:
对逻辑回归中过拟合的控制,通过正则化来实现。
常见的有L1正则化和L2正则化,分别通过在损失函数后加上参数向量θ的L1范式和L2范式的倍速来实现。这个增加的范式,称为“正则项”,也称为“惩罚项”。损失函数写法如下:
其中C是正则化强度的倒数,C越小,损失函数会越小,模型对损失函数的惩罚越重,正则化的效力越强,参数θ被压缩的越来越小。
6.2.2 逻辑回归中的特征工程
在特征数量很多时,我们处于计算量的考虑,会对逻辑回归进行特征选择来降维。
遍历θ的过程可以描述为:
α被称为步长,控制着每走一步(每迭代一次)后θ的变化,并以此来影响每次迭代后的梯度向量的大小和方向。注意:步长不是任何物理距离,它甚至不是梯度下降过程中任何距离的直接变化,它是梯度向量的大小d上的一个比例,影响着参数θ每次迭代后改变的部分。
在sklearn中设置了参数max_iter最大迭代次数来代替步长,帮助我们控制模型的迭代速度并适时地让模型停止。max_iter越大,代表步长越小,模型迭代的时间越长;反之,则代表步长设置很大,模型迭代的时间很短。
注:逻辑回归基于概率理论,假设样本为正样本的概率可以用sigmoid函数(S型函数)来表示,然后通过极大似然估计的方法估计出参数的值。