“广义线性模型”,是指线性模型及其简单的推广,包括岭回归,lasso,LAR,logistic回归,感知器等等。
1、简单线性回归
可以由最小二乘法实现。
最小二乘法的缺点是依赖于自变量的相关性,当出现复共线性时,设计阵会接近奇异,因此由最小二乘方法得到的结果就非常敏感,如果随机误差出现什么波动,最小二乘估计也可能出现较大的变化。而当数据是由非设计的试验获得的时候,复共线性出现的可能性非常大。
2、 岭回归和Lasso回归【3】
针对高方差,即过拟合的模型,当线性回归过拟合时,权重系数wj就会非常的大。解决办法之一就是对模型进行正则化:
岭回归(Ridge Regression)可以理解为在线性回归的损失函数的基础上,加,入一个L2范数正则项,来限制W不要过大。其中λ>0,通过确定λ的值可以使得模型在偏差和方差之间达到平衡,随着λ的增大,模型的方差减小,偏差增大。
Lasso回归和岭回归类似,不同的是,Lasso可以理解为在线性回归基础上加入一个L1范数正则项,同样来限制W不要过大。
其中λ>0,通过确定λ的值可以使得模型在偏差和方差之间达到平衡,随着λ的增大,模型的方差减小,偏差增大。我们的目的就是要权衡偏差和方差,使模型达到最优。
Lasso由于使用L1正则项,所以具有一定的特征选择功能,因为L1正则倾向于产生稀疏稀疏,它可以将一些“对标签没有用处”的特征对应的系数压缩为0,进而将对结果有较大影响的特征突显出来,如下图所示
其实,LASSO回归于岭回归只是在惩罚函数部分有所不同,但这个不同却让LASSO明显占了很多优势,例如在变量选择上就比岭回归强悍的多。就以直观的图形为例,LASSO回归的惩罚函数映射到二维空间的话,就会形成“角”,一旦“角”与抛物面相交,就会导致beta1为0(如上图所示),这样beta1对应的变量就是一个可抛弃的变量。但是在岭回归过程中,没有“角”的圆形与抛物面相交,出现岭回归系数为0的概率还是非常小的。
上面的二维图像是为了方便理解L1和L2正则化的不同,如果把岭回归的等价目标函数展示到几何图形中的话,将会是下面的图像(这里以两个变量的回归系数为例)【4】。对此就能够对其特征选择有更清晰的认识。
3、ElasticNet 弹性网络
ElasticNet 是一种使用L1和L2先验作为正则化矩阵的线性回归模型.这种组合用于只有很少的权重非零的稀疏模型,比如:class:Lasso, 但是又能保持:class:Ridge 的正则化属性.我们可以使用 l1_ratio 参数来调节L1和L2的凸组合(一类特殊的线性组合)。
当多个特征和另一个特征相关的时候弹性网络非常有用。Lasso 倾向于随机选择其中一个,而弹性网络更倾向于选择两个.
在实践中,Lasso 和 Ridge 之间权衡的一个优势是它允许在循环过程(Under rotate)中继承 Ridge 的稳定性.
4、回归模型的评价
在sklearn中包含四种评价尺度,分别为mean_squared_error、mean_absolute_error、explained_variance_score 和 r2_score【2】。
mean_absolute_error:平均绝对误差(Mean Absolute Error,MAE),用于评估预测结果和真实数据集的接近程度的程度
,其其值越小说明拟合效果越好。
mean_squared_error:均方差(Mean squared error,MSE),该指标计算的是拟合数据和原始数据对应样本点的误差的
平方和的均值,其值越小说明拟合效果越好。
yi :预测值, y : 观察值, y_ : 观察值的平均数
explained_variance_score:解释回归模型的方差得分,其值取值范围是[0,1],越接近于1说明自变量越能解释因变量
的方差变化,值越小则说明效果越差。(1-var(y - yi)/var(y),用的是残差的方差)
r2_score:判定系数,其含义是也是解释回归模型的方差得分,其值取值范围是[0,1],越接近于1说明自变量越能解释因
变量的方差变化,值越小则说明效果越差。(1-家(y-yi)^2/var(y),用的是残差的平方和)
与R2相比,EVS得到的系数会偏大一些;因此,更加保守的方法是使用R2
相关系数(协方差/sqrt(方差1*方差2)) ,衡量线性关系的强弱(但只能衡量线性系数),引申:协方差矩阵
5、偏差和方差【3】
机器学习算法针对特定数据所训练出来的模型并非是十全十美的,再加上数据本身的复杂性,误差不可避免。说到误差,就必须考虑其来源:模型误差 = 偏差(Bias)+ 方差(Variance)+ 数据本身的误差。其中数据本身的误差,可能由于记录过程中的一些不确定性因素等导致,这个我们无法避免,能做的只有不断优化模型参数来权衡偏差和方差,使得模型误差尽可能降到最低。
偏差:导致偏差的原因有多种,其中一个就是针对非线性问题使用线性方法求解,当模型欠拟合时,就会出现较大的偏差
方差:产生高方差的原因通常是由于模型过于复杂,即模型过拟合时,会出现较大的方差
通常情况下,我们降低了偏差就会相应地使得方差提高,降低了方差就会相应地提高了偏差,所以在机器学习的模型中,我们总是希望找到一组最优的参数,这些参数能权衡模型的偏差和方差,使得模型性能达到最优。我在知乎上找到这样一张图方便各位理解。
参考资料
【1】https://blog.csdn.net/wenyusuran/article/details/26396297 Python机器学习——线性模型(sklearn库翻译)
【2】https://blog.csdn.net/Softdiamonds/article/details/80061191 学习笔记2:scikit-learn中使用r2_score评价回归模型(好像有个公式放错了)
【3】https://blog.csdn.net/Joker_sir5/article/details/82756089 岭回归和Lasso回归
【4】http://www.sohu.com/a/205166352_654419 从零开始学Python【24】--岭回归及LASSO回归(理论部分
【5】https://www.jianshu.com/p/cf2b391a3c95 sklearn文档 — 1.1. 普通线性模型 (最近发现的,sklearn文档翻译)