解决高方差问题及模型正则化(岭回归和LASSO回归)

一、解决高方差的通常手段:
1.降低模型复杂度
2.减少数据维度;降噪
3.增加样本数(模型太过复杂,模型中的参数非常多,而样本数不足以支撑计算出这么复杂的参数)
4.使用验证集
5.模型正则化
二、模型正则化
(1)什么事模型正则化?
我们之前使用多项式回归(n=100)过拟合一个样本的例子,可以看到这条模型曲线非常的弯曲,而且非常的陡峭,可以想象这条曲线的一些θ系数会非常的大。 模型正则化需要做的事情就是限制这些系数的大小。
(2)模型正则化基本原理:
解决高方差问题及模型正则化(岭回归和LASSO回归)_第1张图片
一些需要注意的细节:

对于θ的求和i是从1到n,没有将θ0加进去,因为他不是任意一项的系数,他只是一个截距,决定了整个曲线的高低,但是不决定曲线每一部分的陡峭和缓和
θ求和的系数二分之一是一个惯例,加不加都可以,加上的原因是因为,将来对θ2>求导的时候可以抵消系数2,方便计算。不要也是可以的
α实际上是一个超参数,代表在我们模型正则化下新的损失函数中,我们要让每一个θ尽可能的小,小的程度占我们整个损失函数的多少,如果α等于0,相当于没有正则化;如果α是正无穷的话,那么我们主要的优化任务就是让每一个θ尽可能的小

这整个过程也叫做岭回归(Ridge Regression):
(3)岭回归
解决高方差问题及模型正则化(岭回归和LASSO回归)_第2张图片
编程实现岭回归:

from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.linear_model import Ridge
def RidgeRegression(degree,alpha):
    return Pipeline([
        ('poly',PolynomialFeatures(degree=degree)),
        ('std_scaler',StandardScaler()),
        ('ridge_reg',Ridge(alpha=alpha))
    ])
# 注意alpha后面的参数是所有theta的平方和,而对于多项式回归来说,岭回归之前得到的θ都非常大
# 所以为了限制让他们比较小,我们前面系数可以取的小一些
ridge1_reg = RidgeRegression(degree=20,alpha=0.00001)
ridge1_reg.fit(X_train,y_train)
ridge1_predict = ridge1_reg.predict(X_test)
mean_squared_error(y_test,ridge1_predict)

普通多项式回归和使用岭回归效果图对比:
在这里插入图片描述

解决高方差问题及模型正则化(岭回归和LASSO回归)_第3张图片
(4)LASSO Regression:
解决高方差问题及模型正则化(岭回归和LASSO回归)_第4张图片
①使用|θ|代替θ2来标示θ的大小
②Selection Operator – 选择运算符:LASSO回归有一些选择的功能

(5)比较Ridge和LASSO
解决高方差问题及模型正则化(岭回归和LASSO回归)_第5张图片
解决高方差问题及模型正则化(岭回归和LASSO回归)_第6张图片
α=100的时候,使用Ridge的得到的模型曲线依旧是一根曲线,事实上,使用Ridge很难得到一根倾斜的直线,他一直是弯曲的形状

但是使用LASSO的时候,当α=0.1,虽然得到的依然是一根曲线,但是他显然比Radge的程度更低,更像一根直线

这是因为LASSO趋向于使得一部分theta值为0(而不是很小的值),所以可以作为特征选择用,LASSO的最后两个字母SO就是Selection Operator的首字母缩写 使用LASSO的过程如果某一项θ等于0了,就说明LASSO Regression认为这个θ对应的特征是没有用的,剩下的那些不等于0的θ就说明LASSO Regression认为对应的这些特征有用,所以他可以当做特征选择用

原因:
当使用Ridge的时候,当α趋近与无穷大,那么使用梯度下降法的J(θ)的导数,J(θ)向0趋近的过程中,每个θ都是有值的,所以是曲线
但是LASSO不同,在LASSO的损失函数中,如果我们让α趋近于无穷,只看后面一部分的话,那么后面一部分的绝对值实际上是不可导的,我们可以使用一种sign函数刻画一下绝对值导数。那么这个时候,同样在J(θ)向0趋近的过程中,他会先走到θ等于0的y轴位置,然后再沿着y轴往下向零点的方向走,是规则的折线。

这也说明了Ridge为什么叫岭回归,因为他更像是翻山越岭一样,在梯度下降法中一点一点找坡度缓的方向前进。而LASSO的路径就比较规则,会在训练的过程中碰到一些轴使得某些θ为0。

所以从计算准确度上来说,我们应该更加倾向于Ridge,但是如果我们的维度比较多,样本非常大(比如多项式回归时degree=100)
(6)总结
Ridge和LASSO都是在损失函数中添加一项,来调节θ的值使其尽可能的小,使得我们的模型泛化能力更好一些。
在机器学习领域中,我们会发明不同的名词来描述不同的标准,比如用Ridge和LASSO来衡量正则化的这一项;MSE和MAE用来衡量回归结果的好坏,欧拉距离和曼哈顿距离用来衡量两点之间的距离。但是他们背后的数学思想是非常的类似的,表达出的数学含义也是一致的。只不过应用到不同的场景中产生了不同的效果。
解决高方差问题及模型正则化(岭回归和LASSO回归)_第7张图片
解决高方差问题及模型正则化(岭回归和LASSO回归)_第8张图片
注:有了L1,L2正则项,我们就可以进一步得到LN正则项,虽然实际应用中我们的n不会超过2,但是在数学推导中是有意义的。
弹性网引入解决高方差问题及模型正则化(岭回归和LASSO回归)_第9张图片
在损失函数下,添加上一个L1正则项和一个L2正则项,并引入一个参数r来表示他们之间的比例。同时结合了岭回归和LASSO回归的优势。
实际应用中,通常应该先尝试一下岭回归(如果计算能力足够的话)。但是如果θ数量太大的话,消耗计算资源可能非常大,而LASSO由于有的时候急于把一些θ化为0,可能会导致得到的偏差比价大,这个时候需要使用弹性网。
回忆小批量梯度下降法也是将随机梯度下降法和批量梯度下降法结合到了一起。在机器学习领域中,经常使用这种方式来创造出一些新的方法,这些方法虽然名词非常的酷,但是他们背后的意义是非常简单的。

模型泛化的一个举例。我们在考试前会做很多练习题。我们做练习题不是为了把全部的练习题(训练数据集)都得到满分,而是为了在最后的那一场考试(真实数据)中得到满分

你可能感兴趣的:(ML-liuyubobobo,回归,机器学习,算法)