[学习记录]intel-ML课程记录04

本次课主要讲正则化、特征选取以及梯度下降(部分内容参考了链接1链接2


在先前的讨论中,我们发现K值越高,或是线性回归的阶数越高,一定程度能够对训练数据产生更好的拟合效果,但是对于测试数据而言误差也许非常大,即过拟合

正则化就能够用来解决因为特征过多导致的过拟合问题

βj即惩罚项,用来减少某一个特征所带来的影响,λ作为系数作为控制参数,可以使各个参数都不会太大,从而防止过拟合。但λ过大也会导致欠拟合

在上述成本函数中,除了通过惩罚减小参数,同时由于平方的影响,参数越大,收到的惩罚越严重。这叫做岭回归(L2)。

 

还有一种叫做lasso回归,即取绝对值,可用于特征选择,惩罚会选择性地缩小一些系数,但收敛比岭回归慢。

弹性网络回归,是一种对L1和L2的妥协,调整不同的参数控制两种回归的惩罚度


上面三种正则化方法都涉及到参数λ的选择,目前λ往往是依靠经验确定的,在调整λ时不能使用训练集,而是再分出一个验证集用来调整。

 以下给出实例

岭回归,参数alpha就是λ。ridgecv类会对验证集进行交叉验证。

lasso回归,基本同岭回归

弹性网络回归,alpha为λ_L1,l1_ratio=λ_L1/λ_L2


特征选择

正则化方法通过减少特征的贡献从而实现特征选择。对于L1正则化来说,将部分特征贡献减至0即完成了特征选择。当然特征选择也能通过移除某一个特征来实现。

进行特征选择的意义在于

(1)减少特征数量是为了防止过度拟合

(2)对于部分模型,较少的特征可以有效缩短拟合时间,提高拟合效果

(3)同时确定最关键的特征也有利于提高模型的可解释性

下面给出实例

est为使用的模型的样例,n_features_to_select为最后剩下的参数的个数


梯度下降

梯度下降想找到一个全局代价最低点,通过求导数

对于之前我们讨论的成本函数J(β0,β1),也许图像是这样的,梯度是一个矢量,由各个参数在该点的导数组成。

 

我们从一个点出发,通过该点的梯度寻找下一个点,逐级找下去最终希望找到全局最低点,通过一个α来控制每次前进的步幅。

用这种方法叫做线性回归梯度下降方法

还有一种叫做随机梯度下降算法,使用单一点而不是所有点进行计算。

由于路径是直接由单一点产生的容易受噪音影响,所以有点“随机”

最小批梯度下降算法

 注意是n而不是m,每训练n个作为一批进行梯度下降,是目前最好的梯度下降算法,也不像随机梯度下降那样容易受噪音影响。

(1)通常用于神经网络的迷你批处理实现

(2)批的大小在50-256之间

(3)批的大小与学习速率都需要权衡

(4)学习率应该随着时间增加而降低

实例

 随机梯度下降:loss='squared_loss'声明是线性回归,alpha为学习速率。

 

略作调整就变成最小批模式

 逻辑回归版随机梯度下降分类

 对应的最小批模式


习题

Q1

问题1:导入数据,将x分散到0-1范围内,使用公式y=sin(2πx)得到数据Y

Q2

问题2:使用PolynomialFeatures 类建立一个20阶多项式特征,使用线性回归拟合数据,绘制比较结果。注意PolynomialFeatures需要接受一个长为x,高为1的dataframe。

 

可以对比特征前后数据框情况

Q3

问题3:使用先前多项式特征的数据集进行岭回归与lasso回归,画出图像。

这个图画的非常经典了

图像可以看出来线性回归过拟合,紫色(岭回归)和黄色(lasso回归)都还可以

看看正则化的效果

然后是分析20个系数的大小,画图过程相当繁琐。不过图非常简洁,刚开始几个系数较大,但到后面系数非常接近零,贡献降到最低。

 Q4

问题4:接下来导入上一个实验的数据集,准备进行接下来的实验。

(1)导入数据,进行one-hot编码

(2)收集浮点类型的数据集,限制斜率

(3)逻辑回归对参数的影响

(4)将打算作为target的SalePrice取出来,准备测试集与训练集

Q5

问题5:写一个rmse函数来对比预测值与实际值,并且返回RMSE。

图像横轴是实际价格,纵轴是预测价格,可以看到两者的比基本接近1:1

Q6

问题6:岭回归使用L2来减小系数大小,这在方差较大的时候回非常有用。问题要求采用如下值作为α的范围。

Q7:

问题7:使用LassoCV和ElasticNetCV对刚才的数据进行交叉验证,比较效果

 

0.1-0.9范围内的弹性网络

最后绘图比较,发现。。。其实差不多

 Q8:

问题8:最后探索一下随机梯度下降,线性模型对缩放非常敏感,同时SGD也是。此外较高的学习率会导致算法发散,过低又影响收敛速度。要求拟合一个随机梯度下降模型,使用三种不同的惩罚措施来交叉验证。注意,在拟合模型钳不要进行缩放。

比较与不使用随机梯度下降的结果。

我们发现算法目前错误率高的离谱,我们调整学习率重新比较,发现结果好多了

最后对训练数据进行缩放,再次测试效果,不过不要传入eta0

首先不小心传入了eta0

发现误差非常大

那么不传入呢?(默认0.01)

这次效果就相对好一点了。

原文地址:https://www.cnblogs.com/trickofjoker/p/9364023.html