机器学习线性回归之损失函数与过拟合

自我记录总结之用,可能不适合他人,但高斯分布+极大似然推导出最小二乘法的个人理解这一小段是我个人对该知识点的理解,自认为有利于对这一部分的理解,可供参考。

残差

预测值用 y ^ \hat{y} y^表示。真值用y表示。
残差(Residual) = R = y - y ^ \hat{y} y^
残差平方 = R 2 R^2 R2
残差平方和 = RSS(Residual Sum Of Square) = 所有样本残差平方之后再取和。

损失函数

损失函数专门用来度量模型预测值和真是值之间的差异。残差平方是损失函数的一种,被称为L2损失。损失函数的标识用 L ( y , y ^ L(y,\hat{y} L(y,y^)表示,L2损失函数L(y, y ^ \hat{y} y^) = ( y − y ^ ) 2 。 (y - \hat{y})^2。 (yy^)2目标函数是把训练样本集合里的每个样本的损失函数加在一起,目标函数用J表示,那么J是哪个单词的首字母呢?L2损失的目标函数 J ( y , y ^ ) = ∑ i = 1 N ( y i − y ^ i ) 2 J(y,\hat{y}) = \sum _{i=1}^{N}(y_{i} - \hat{y}_{i})^2 J(y,y^)=i=1N(yiy^i)2,其中的N是样本数。损失函数是针对单个样本而言,目标函数是针对多个样本而言。L1损失函数 L ( y , y ^ ) = ∣ y − y ^ ∣ = ∣ r ∣ L(y,\hat y) = |y - \hat y| = |r| L(y,y^)=yy^=r

L2损失的优势是处处可导,有利于优化,劣势是对噪声敏感,因为平方之后会加大样本之间损失的差异,那些被加大的样本在模型求解中占主导地位,会使模型函数更偏向于噪声大的样本点。L1对噪声不敏感,但却不是处处可导,优化求解不方便。看起来像是鱼和熊掌不可兼得,但却真的存在鱼和熊掌可以兼得的解决方法。这个方法就是综合了L1和L2优点的Huber损失。

Huber损失函数
L δ ( r ) = { 1 / 2 r 2 ∣ r ∣ ≤ δ δ ∣ r ∣ − 1 / 2 δ 2 o t h e r w i s e L_{\delta}(r)=\begin{cases} 1/2r^2\quad &|r| \leq \delta \\ \delta|r| - 1/2\delta^2 &otherwise \end{cases} Lδ(r)={1/2r2δr1/2δ2rδotherwise
其中,r代表残差, δ \delta δ表示一个较小的数字,otherwise情况下,之所以还要减去 1 / 2 δ 2 1/2\delta^2 1/2δ2,是为了使函数在 δ \delta δ那一点保持连续,这种变换不影响优化结果。

下图是L1、L2、Huber损失的函数图像。横轴是残差值,纵轴是损失函数的值
在这里插入图片描述

过拟合

过拟合(overfitting):过于复杂的模型对训练数据拟合得太好,而对测试数据拟合得不好,叫做过拟合。

欠拟合(underfitting):过于简单的模型对训练数据拟合得欠佳,叫做欠拟合,当然对测试集拟合得不好。

线性回归的过拟合现象不是太严重。线性回归中采用线性模型,而线性模型是很简单的模型,所以当特征维数不是太高时。

重力加速度实验就是线性回归。需要做很多组实验,过拟合现象不是很严重。

n个点,可以用n-1阶多项式进行完美拟合。该多项式包含0到n-1次多项式分项,确定这样一个函数模型后,就可以将这n个点代入函数,形成 n个等式,原则上可以求出n个w参数,这些参数从从 w 0 w_{0} w0 w n − 1 w_{n-1} wn1,这样就完美的拟合了这n个点,此时的rss也为0。PPT中有分别用0到9阶多项式拟合10个点的函数图像,这10个点使用sin函数+噪声产生,而噪声是用正太分布产生。对正太分布的方差及其他知识点还需要加深理解(2020-01-26)。

多项式公式 y = ∑ j = 0 m w j x j y=\sum_{j=0}^{m}w_{j}x^j y=j=0mwjxj
在这里插入图片描述
模型越复杂(阶数增加),越容易出现过拟合。上图是随着多项式阶数增加时,测试集、训练集误差的变化情况,图中说明当模型复杂度继续增加,训练误差会继续下降,甚至一直降到0,而测试误差却反而增大,这时发生了过拟合。在上图中的情况,选取M=3是最适合的多项式阶数。误差使用的计算方式是: E R M S = 1 / N ∑ i = 1 N ( y i − y ^ i ) 2 E_{RMS}= \sqrt{1/N\sum _{i=1}^{N}(y_{i} - \hat{y}_{i})^2} ERMS=1/Ni=1N(yiy^i)2 。这里根号的作用是去量纲,应查查去量纲的相关知识。

评价模型性能不能在训练集上评估,而应该在新的测试数据上进行评估。常常采用将已有的数据集拆分称训练集和测试集的方式。

泛化能力/推广性(generalization)。在新数据上表现出的精准能力。应该可以使用多种标准进行评估。

随着多项式阶数的增加,回归系数也会增大。发生过拟合时 ,回归系数很大,即输入x的很小变化就可以带来输出y的较大变化,这就使得函数变化非常剧烈。

随着样本数的增加,过拟合的现象也会逐渐减弱。对于线性模型,通常样本数是未知数(参数w的数目)的5到10 倍,拟合效果会比较理想。多项式中输入x其实是高阶次,此处的线性模型,指的是未知量w只有1次,而不是高阶次。那么问题来了,线性回归被称为线性模型,到底是因为特征只有1次,还是参数只有1次

基于上一条知识点,样本数足够的情况下,也可以使用更复杂的模型,不会太容易出现过拟合随着样本数的增加,f(x)会增加,但噪声却不变,所以信息更多,尽管模型复杂,拟合效果也会更好。这句话怎么理解?

用正则项解决过拟合。可通过在目标函数中增加正则项减弱过拟合现象。正则项有两个类型,分别时L2正则和L1正则。 L 2 正则 R ( w ) = ∣ ∣ w ∣ ∣ 2 2 = λ ∑ j = 1 M w j 2 L2正则 R(w) =||w||_{2}^2=\lambda\sum_{j=1}^{M}w_{j}^2 L2正则R(w)=∣∣w22=λj=1Mwj2 L 1 正则 R ( w ) = ∣ ∣ w ∣ ∣ 1 = λ ∑ j = 1 M ∣ w j ∣ L1正则R(w) = ||w||_{1} = \lambda\sum_{j=1}^{M}|w_{j}| L1正则R(w)=∣∣w1=λj=1Mwj 多项式模型之损失 + L 2 正则的目标函数: J r i d g e ( w , λ ) = ∑ i = 0 N ( y i − ∑ j = 0 M w j x j M ) 2 + λ ∑ j = 1 M w j 2 多项式模型之损失+L2正则的目标函数:J_{ridge}(w,\lambda)=\sum_{i=0}^{N}(y_{i}-\sum_{j=0}^{M}w_{j}x_{j}^M)^2 + \lambda\sum_{j=1}^{M}w_{j}^2 多项式模型之损失+L2正则的目标函数:Jridge(w,λ)=i=0N(yij=0MwjxjM)2+λj=1Mwj2
正则项用大写R表示,取risk的含义。目标函数只包含训练集上的损失,称为经验风险,除此还包含正则项时,被称为结构风险。PPT里有一句话:正则项通常与模型f的复杂度有关,这句话该如何理解?正则项又被称为惩罚项,截距项 w 0 w_{0} w0是不被惩罚的。L2正则中,右下角的2代表L2模,已经有了取平方的信息了,为什么右上角还有再写个2呢?。目标函数中使用L2正则, 被称为岭回归(Ridge Regression)。之前的印象中,使用L2损失+L2正则才被称为岭回归,现在看来这个理解有误,应再弄清楚岭回归的准确定义。岭回归有如下的规律:正则项中的 λ \lambda λ与w的绝对值呈负相关关系, λ \lambda λ约大,w绝对值(平方)越小,模型越简单(注意:w绝对值小,也被认为是模型简单), λ \lambda λ无限大时,w绝对值趋近于0, λ \lambda λ最小时,w绝对值很大,这都不是最优的情况,印象中老师还讲到,最佳 λ \lambda λ l n λ = − 18 ln^{\lambda}=-18 lnλ=18那么L1正则是否也存在相同的规律?加上L2的目标函数为什么能够解决过拟合问题?也许句话可以回答这个问题,即:正则项的目的,是使优化后的w不要太大,联系到前面讲到的“过拟合情况下,参数特别大,会导致模型波动特别大”,若w不是特别大,则可以解决过拟合问题。那么正则项又如何使优化后的w不会太大呢?

岭回归(Ridge)。此处往上能找到岭回归的目标函数,那是在PPT里确认出现过的。在后面的PPT里又出现过一种岭回归的定义,即岭回归为:L2损失 + L2正则 + 线性回归,其目标函数如下: J ( W ; j ) = ∑ i = 1 N L ( y i , f ( x i ; w ) ) + λ R ( W ) J(W;j) = \sum_{i=1}^{N}L(y_{i}, f(x_{i};w)) + \lambda R(W) J(W;j)=i=1NL(yi,f(xi;w))+λR(W) = ∑ i = 1 N ( y i − W T x i ) 2 + λ ∑ j = 1 D W j 2 =\sum_{i=1}^{N}(y_{i} - W^{T}x_{i})^2 + \lambda\sum_{j=1}^{D}W_{j}^2 =i=1N(yiWTxi)2+λj=1DWj2 ∣ ∣ Y − X W ∣ ∣ 2 2 + λ ∣ ∣ W ∣ ∣ 2 ||Y-XW||_{2}^2 + \lambda||W||_{2} ∣∣YXW22+λ∣∣W2那么问题来了,岭回归包含L2损失项、L2正则项确定无疑,那么模型到底应该是高阶多项式,还是1阶多项式,或者是其他的情况呢?

Lasso。L2损失 + L1正则,Lasso(Least Absolute Shrinkage and Selection Operator),其中Absolute代表正则项的绝对值,Shrinkage代表可以对参数w起到收缩作用,Selection Operator代表可以得到稀疏解,即某些w可以为0,这可以起到模型选择的作用。那么问题来了,这个到底叫做模型选择,还是特征选择呢?。目标函数为: J ( W ; j ) = ∑ i = 1 N L ( y i , f ( x i ; w ) ) + λ R ( W ) J(W;j) = \sum_{i=1}^{N}L(y_{i}, f(x_{i};w)) + \lambda R(W) J(W;j)=i=1NL(yi,f(xi;w))+λR(W) = ∑ i = 1 N ( y i − W T x i ) 2 + λ ∑ j = 1 D ∣ W j ∣ =\sum_{i=1}^{N}(y_{i} - W^{T}x_{i})^2 + \lambda\sum_{j=1}^{D}|W_{j}| =i=1N(yiWTxi)2+λj=1DWj ∣ ∣ Y − X W ∣ ∣ 2 2 + λ ∣ ∣ W ∣ ∣ 1 ||Y-XW||_{2}^2 + \lambda||W||_{1} ∣∣YXW22+λ∣∣W1 那么问题又来了,Ridge和Lasso的定义,是否包含确定模型的部分,比如,如果不是线性模型,或者高阶多项式模型,那么又算是Ridge和Lasso吗?

弹性网络。L2损失 + (L2正则 + L正则) R ( W ) = ∑ j = 1 D ( ρ ∣ W j ∣ + ( 1 − ρ ) / 2 W j 2 ) , 0 < = ρ < = 1 R(W)=\sum_{j=1}^{D}(\rho|W_{j}| + (1-\rho)/2W_{j}^2), 0 <= \rho <= 1 R(W)=j=1D(ρWj+(1ρ)/2Wj2),0<=ρ<=11- ρ \rho ρ的部分为什么还要除以2呢?

正则的效果。L2正则可以收缩线性回归的系数,模型稳定,当输入特征存在共线性(相关性)时,可以使用L2正则。L1正则也会收缩回归系数,当正则参数取合适值的时候,可以得到稀疏解,当 λ \lambda λ达到一定值时,就会有一些特征稀疏开始为0,当 λ \lambda λ超过一定值时,所有的系数就都会为0,这个值就是 λ m a x \lambda_{max} λmax,坐标轴下降一节讲解到了可以得到稀疏解的原理。当输入特征特别多时,有些特征与目标变量之间相关性很弱时,L1正则能只选择相关性很强的特征,模型解释性较好,这个是利用了得到稀疏解的特征。

去量纲。由于正则中对不同维度的 W j W_{j} Wj同等对待,对输入特征X最好做去量纲处理,使得不等维度的取值范围大致相同。(如标准化:sklearn.preprocessing.StandardScaler)

sin曲线拟合中不同正则参数对应岭回归的训练测试误差
在这里插入图片描述
也可以将 λ \lambda λ理解为损失项和正则项的权重平衡,当 λ \lambda λ很小时,就是以损失项为主。L0正则是不为0参数的个数,好处是可以得到稀疏解,起到特征选择的作用。(确定是L0吗?L1也可得到稀疏解。好像也说L0正则是NP问题,不好优化,那么什么又是NP问题呢?)有时可以将L1和L2联合起来使用,像后面将的xgboost、ctr预估中的ftrl都是将两种正则联合起来用的。

减少过拟合现象的另一种方法是降低噪声。但我们面对的情况多数时候是训练数据给定的情况,所以过拟合才是最常用的方法。

奥卡姆剃刀(Occam’s Razor)原理:简单有效,选择能结束数据的最简单模型。

老师总结到,减少过拟合现象的方法有:增加样本数、添加正则项、降低噪声。我认为单从减少过拟合现象的角度来说,降低模型复杂度也可以达到目的,但可能会出现欠拟合。

scikit-learn中的岭回归。fit函数可以传入权重向量,每个分量对应一个向本的权重。

class sklearn.linear-model.Ridge(alpha=1.0, fit_intercept=true,normalize=False, copy_X=True, max_iter=None, tol = 0.001, solver=‘auto’, random_state=None)

alpha:目标函数中的 λ \lambda λ
fit_intercept、normalize、copy_X:意义同LinearRegression。好像缺少LinearRegression的笔记,能记得住的fit_intercept表示是否拟合截距项。
属性、常用方法同LinearRegression。

scikit-learn中的Lasso。scikit-learn中实现的Lasso目标函数为 1 / 2 N ∣ ∣ Y − X W ∣ ∣ 2 2 + λ ∣ ∣ W ∣ ∣ 1 1/2N||Y-XW||_{2}^2 + \lambda||W||_{1} 1/2N∣∣YXW22+λ∣∣W1,这个比起理论讲解中的目标函数多乘了一个1/2N,对优化结果没有影响。函数签名是
class sklearn.linear-model.Lasso(alpha=1.0, fit_intercept=true,normalize=False, copy_X=True, max_iter=1000, tol = 0.001,warm_start=True, positive=True, random_state=None, selection=‘cyclick’)。

参数解释与岭回归类似,但与岭回归相比,好像又多了一些,使用时应注意。

scikit-learn中的弹性网路。参考课件

损失函数的概率解释

回归任务的最佳模型可以是满足残差平方和或L2损失最小的模型,即模型的目标函数是: J ( W ) = R S S ( W ) = ∑ i = 1 N L ( y i , y ^ i ) = ∑ i = 1 N ( y i − f ( x i ) ) 2 J(W) = RSS(W) = \sum_{i=1}^{N}L(y_{i},\hat y_{i}) = \sum_{i=1}^{N}(y_{i} - f(x_{i}))^2 J(W)=RSS(W)=i=1NL(yi,y^i)=i=1N(yif(xi))2残差平方和最小也被称为是最小二乘(Ordinary Least Square, OLS),其中的最小是指目标函数要最小,二乘指的是L2损失中的平方。注意:此处的最小二乘的定义,并没有限定具体的模型,另外Oradinary是什么意思?

假设收集到一些数据样本,里边包括x、y的值
以下是解释过程
令真值y和预测值f(x)之间的误差为 ε \varepsilon ε,假设 ε \varepsilon ε的分布服从0均值的正太分布。
y = f ( X ) + ε y = f(X) + \varepsilon y=f(X)+ε
ε \varepsilon ε~ N ( 0 , δ 2 ) N(0, \delta^2) N(0,δ2)           假设条件
y ∣ X y|X yX~ N ( f ( X ) , δ 2 ) N(f(X), \delta^2) N(f(X),δ2)   在给定X的情况下,f(X)是常数,随即变量加上常数,只改变分布的均值,不改变方差
p ( y ∣ X ) = 1 2 π δ e x p ( − 1 ( y − f ( x ) ) 2 2 δ 2 ) p(y|X) = \frac{1}{\sqrt{2\pi}\delta} exp(-1\frac{(y-f(x))^2}{2\delta^2} ) p(yX)=2π δ1exp(12δ2(yf(x))2)    正太分布公式
似然函数为
l ( f ) = l o g p ( D ) = l o g ( ∏ i = 1 N p ( y ∣ X ) ) l(f)=logp(D)=log(\prod_{i=1}^{N}p(y|X)) l(f)=logp(D)=log(i=1Np(yX))相乘取log等于取log再相加
= ∑ i = 1 N l o g ( p ( y i ∣ X i ) ) =\sum_{i=1}^{N}log(p(y_{i}|X_{i})) =i=1Nlog(p(yiXi))代入p(y|X)的具体形式 = ∑ i = 1 N l o g ( 1 2 π δ e x p ( − 1 ( y i − f ( X i ) ) 2 2 δ 2 ) ) =\sum_{i=1}^{N}log( \frac{1}{\sqrt{2\pi}\delta} exp(-1\frac{(y_{i}-f(X_{i}))^2}{2\delta^2} )) =i=1Nlog(2π δ1exp(12δ2(yif(Xi))2))以下两步使用到的公式:相乘取log等于取log再相加, l o g a 1 / x = − l o g a x , l o g a b c = c l o g a b , l o g a a c = c log_{a}^{1/x} = -log_{a}^x, log_{a}^{b^c}=c log_{a}^b,log_{a}^{a^c}=c loga1/x=logax,logabc=clogab,logaac=c = − N l o g ( 2 π ) + N l o g ( 1 δ ) − ∑ i = 1 N ( y i − f ( X i ) ) 2 2 δ 2 =-Nlog(\sqrt{2\pi}) + Nlog(\frac{1}{\delta}) - \sum_{i=1}^{N}\frac{(y_{i}-f(X_{i}))^2}{2\delta^2} =Nlog(2π )+Nlog(δ1)i=1N2δ2(yif(Xi))2 = − N 2 l o g ( 2 π ) − N l o g δ − ∑ i = 1 N ( y i − f ( X i ) ) 2 2 δ 2 =-\frac{N}{2}log(2\pi) - Nlog\delta -\sum_{i=1}^{N} \frac{(y_{i}-f(X_{i}))^2}{2\delta^2} =2Nlog(2π)Nlogδi=1N2δ2(yif(Xi))2以上似然函数的结果中前两项是常数,与f(x)也没有关系,在求解求极大值参数的场景下,不影响最后的结果。剩余部分的分子 2 δ 2 2\delta^2 2δ2也不影响结果,所以就只剩下 − ∑ i = 1 N ( y i − f ( X i ) ) 2 -\sum_{i=1}^{N} {(y_{i}-f(X_{i}))^2} i=1N(yif(Xi))2,以上式子取极大值,等价于取反后求最小值 ∑ i = 1 N ( y i − f ( X i ) ) 2 \sum_{i=1}^{N} {(y_{i}-f(X_{i}))^2} i=1N(yif(Xi))2这刚好是残差平方和或L2损失,所以极大似然估计等价于最小二乘。在推到过程中使用到了log似然,最后还变换为了负log似然最小,这对结果没有影响,负log似然也是损失函数的一种,L2损失也是负log似然损失,逻辑回归采用的也是负log似然损失,而且还会带来计算上的便利。数学家高斯在追踪天体运行轨迹时,采用正太分布对回归误差进行分析,因此正太分布也被称为高斯分布。拉普拉斯其实先于高斯计算天体运行轨迹,但他使用的是拉普拉斯分布,所以效果不好,拉普拉斯分布分布类似于L1损失。

高斯分布+极大似然推导出最小二乘法的个人理解。将观测到的样本位置绘制在空间图上,大体能形成一条线,这条线可能是直线,也可能不是直线,考虑到误差的影响,可能的线绝不止一条,这使问题变得复杂。解决方法是从概率的角度来说找到可能性最大的那一条,就观测到的某一点来说,考虑可能的误差,它最有可能的位置其实是在观测到的那一确切位置的附近,那么这个观测到的位置与最有可能的位置是一个什么样的关系能?应如何取找到呢?答案就蕴藏在高斯分布的这样的一个分布里,最可能的那个点,其实是高斯分布均值那一点,观测到的那一点实际是在高斯分布的某处。可能性最大的那一点即是模型的预测值点,即f(x),实际观测到的那一点其实是真值,即 y ^ \hat y y^,它们之间的误差是 ε \varepsilon ε,该 ε \varepsilon ε服从均值为0的正太分布, y ^ \hat y y^服从均值为f(x)的高斯分布,即 y ^ \hat y y^~ N ( f ( x ) , δ 2 ) N(f(x), \delta^2) N(f(x),δ2),那么 p ( y ^ ) = 1 2 π δ e x p ( ( y ^ − f ( x ) ) δ 2 ) p(\hat y) = \frac{1}{\sqrt{2\pi\delta}}exp(\frac{(\hat y-f(x))}{\delta^2}) p(y^)=2πδ 1exp(δ2(y^f(x))),其中 y ^ \hat y y^为已知量,即观测到的真值,f(x)中的x也是已知量,但其中的模型参数w是未值量,该未知量正好可以通过极大似然的方法求出。值得注意的是,最开始一直无法理解高斯分布是指哪些点的高斯分布,观测到的所有真值显然不是高斯分布,其对应的所有预测值点,显然也不是高斯分布,后来相通了,其实是观测到的每一个点都服从一个不同的高斯分布,因为在给定x的情况下,观测前是不知道该点在哪里的,只知道这个点满足一个高斯分布,其均值就是模型预测的点。

极大似然简介在这里插入图片描述

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值