收入即学习

复习 - 模型的拟合问题 - 方差偏差权衡、损失函数、L2,L1

2019-01-07  本文已影响140人  白尔摩斯

拟合状态模型

随着时间推移,话题k和用户兴趣之间的关系

\color{red}{欠拟合},预测值和真实值本身差距就很远。预测的\color{red}{偏差L(f)}很大。
\color{red}{过拟合},会去刻意得迎合异常值,导致预测值的\color{red}{方差Ω(f)}会比较大。

\color{red}{模型总误差}是有两部分构成的:过拟合的方差+欠拟合的偏差2
通过上述公式可以推导出一个\color{red}{方差偏差权衡} 的概念

方差偏差权衡

06 回归算法 - 损失函数、过拟合欠拟合


07 回归算法 - 过拟合欠拟合案例
在过拟合欠拟合案例中,我们使用\color{red}{多项式扩展}来解决欠拟合的问题,但随着多项式扩展维度的增加,最后模型会变得过拟合。

线性回归 - 多项式扩展 - 不同维度的拟合度

1阶多项式扩展欠拟合,5阶多项式扩展相对比较优秀,9阶多项式扩展过拟合。
观察9阶多项式扩展的结果,系数都非常大。这是模型过多迎合了异常值造成的结果。
9阶多项式扩展形成的模型很难对测试集上的值进行准确预测。

\color{red}{重点:}过拟合,意味着函数在迎合异常值。而当线条在要迎合某一点异常值的时候,斜率会非常大。原本平滑的线条需要迎合了异常值后再回来。 所以,模型系数大导数值大,意味着模型迎合了异常值。模型过拟合

\color{red}{结论:当模型过拟合的时候,一般系数都比较大。}
\color{red}{通过这种方式去判断,即使不画图我们也能预测模型是否过拟合。}


\color{red}{那么怎么解决这种过拟合的问题?}
\color{red}{1、减少特征数。}
\color{red}{2、增加正则项、惩罚项。}

目标函数

为了防止数据过拟合,也就是θ值在样本空间中不能过大/过小,可以在目标函数之上增加一个损失函数:

\color{red}{损失函数(loss/cost function)}

损失函数

在J(θ)中,λ的值越大,损失函数对模型的约束力越好
L2正则 的线性回归模型,称为 Ridge回归 (岭回归)
L1正则 的线性回归模型,称为 LASSO回归

加入了损失函数的目标函数

PS:回过头去看,L1、L2正则其实就是\color{red}{拉格朗日函数}。(SVM中讲到的算法,请融会贯通)
L1、L2中加入惩罚项之后,对应的就是\color{red}{原始问题加入限制条件的情况}


08 回归算法 - 解决过拟合 - L2(Ridge)和L1(LASSO)正则 这章里解释了L1、L2正则的工作原理

===\color{red}{ L2和L1的比较} ===

\color{red}{L2-norm正则},所以不可能导致有维度参数变成0的情况,那么也就不会产生\color{red}{稀疏解};Ridge模型具有较高的准确性、鲁棒性以及稳定性;
\color{red}{L1-norm正则}可以达到最终解的稀疏性要求。LASSO模型具有较高的求解速度;
\color{red}{总结:}当我们觉得每个特征都是有用的,用L2。如果想用回归的手段确定特征的可用性,用L1


\color{red}{什么是稀疏解?} 详解 对于一组参数θk,其中有一个或多个θ等于0,或近似等于0。称这组参数θk存在稀疏解。稀疏的解可以找到有用的维度并减少冗余,提高预测的\color{red}{准确率}\color{red}{鲁棒性}(减少了overfitting)。

\color{red}{为何稀疏解可以找到有用的维度并减少冗余?}
y=ax1+bx2+c; 若求解得到 a=3; b=0; c=2;
我们发现x2特征对于结果的预测没有任何帮助,所以可以将x2的特征删除。


===\color{red}{ Elastic Net 弹性网络算法} ===

\color{red}{如果即要考虑稳定性也考虑求解的速度,就使用Elastic Net。} Elastic Net案例
同时使用L1正则和L2正则的线性回归模型就称为Elastic Net,\color{red}{弹性网络算法}


\color{red}{Elastic Net 需要调的超参数:p、λ} 09 回归算法 - 机器学习调参
在实际工作中,对于各种算法模型(线性回归)来讲,我们需要输入θ、p、λ的值。
θ=(XTX)-1XTY ;算法会自动生成,无需人工干预。p、λ 都是超参数;需要人工调整。

\color{red}{求解p、λ的过程叫做调参。}如交叉验证:将训练数据分成多份,其中一份进行数据验证,并获取最优的超参:p、λ;常见的方法:k折交叉验证。五折交叉验证 (scikit-learn中默认)

\color{red}{K折交叉验证法 (k-fold cross validation) :}划分为k个互斥子集,用k-1作为训练集,剩下一个为测试集,最终每一个子集都会作为测试集,其余子集作为训练集,共进行k次建模,最终得到测试结果的均值。k取值一般为10。随机取k个互斥子集,进行p次,最后p个k-fold cv进行取平均,叫做p次k折交叉验证。

k折交叉验证即能帮我们挑选出最优参数,也能帮我们挑选出最优模型。

k折交叉验证的目的:
得到模型相对稳定的评价指标,尽可能避免异常值带来的影响。
通过:在划分的时候选择多个训练集和多组测试集,求平均的效果。通过平均的度量使得测试结果相对可信一点。

技巧 - 训练集与测试集划分方法

上一篇下一篇

猜你喜欢

热点阅读