【机器学习】梯度下降、岭回归、Lasso回归等

【机器学习】梯度下降、岭回归、Lasso回归等

0 简要复习线性回归(Linear Regression)

  • 线性回归模型函数: y ( x ) = β 0 + β 1 ∗ x 1 + β 2 ∗ x 2 y(x) = \beta_0+ \beta_1*x_1+ \beta_2*x_2 y(x)=β0+β1x1+β2x2 y ( x ) = ∑ i = 0 n b e t a i ∗ x i = B T X y(x) = \sum_{i=0}^{n} beta_i*x_i = B^TX y(x)=i=0nbetaixi=BTX
  • 参数估计的评价机制: 损失函数(loss function) 或 错误函数(error function) 或 评价函数 —— 真实值和预测值之间的误差,最小二乘思维
    • 均方误差损失函数(mean squared error loss): M S E = 1 n ∑ i = 1 n ( y i ^ − y i ) 2 MSE=\frac{1}{n}\sum_{i=1}^{n}(\hat{y_i} -y_i)^2 MSE=n1i=1n(yi^yi)2
    • 平方损失函数(Square Loss): J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 = ( y − X θ ) T ( y − X θ ) J(\theta)=\frac{1}{2}\sum_{i=1}^{m}(h_{\theta}(x^{(i)}) -y^{(i)})^2 = (y-X\theta)^T(y-X\theta) J(θ)=21i=1m(hθ(x(i))y(i))2=(yXθ)T(yXθ),对x(i)的估计值与真实值y(i)差的平方和作为错误估计函数,通过乘以0.5消除系数
    • 为什么损失函数要用平方和?
      • x,y的条件概率(正态分布): p ( y ( i ) ∣ x ( i ) ; θ ) = 1 2 π σ e x p ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) p(y^{(i)}|x^{(i)};\theta)=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2}) p(y(i)x(i);θ)=2π σ1exp(2σ2(y(i)θTx(i))2)
      • 最大似然求解: 1 2 ∑ i = 1 m ( y ( i ) − θ T x ( i ) ) 2 \frac{1}{2}\sum_{i=1}^{m}(y^{(i)} - \theta^Tx^{(i)})^2 21i=1m(y(i)θTx(i))2
  • 目标:如何调整θ以使得J(θ)取得最小值 a r g m i n θ J ( θ ) argmin_\theta J(\theta) argminθJ(θ)问题

1 梯度下降法

  • 梯度下降法问题:结果与初始点的选取有关,可能只能得到全局极小值
  • 注意点:此处不是随机梯度下降法(均方误差损失函数是凸函数);注意特征归一化
  • 步骤:
    • 第一步:首先对θ赋初值,初值选择:1)随机;2)全零向量
    • 第二步:迭代更新改变θ的值,使得J(θ)按梯度下降的方向进行减少,其中梯度方向由J(θ)对θ的偏导数的反方向确定,即: θ j : = θ j + α ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_j:=\theta_j+\alpha(y^{(i)}-h_\theta(x^{(i)}))x_j^{(i)} θj:=θj+α(y(i)hθ(x(i)))xj(i),以下为两种迭代更新方法:
      • 批梯度下降:对全部的训练数据求得误差后,再对θ进行更新,能够不断收敛
      • 增量梯度下降:每扫描一步都要对θ进行更新,不断在收敛处徘徊

2 最小二乘法 OLS

  • 方法:求偏导,即 θ = ( X T X ) − 1 X T y \theta = (X^TX)^{-1}X^Ty θ=(XTX)1XTy
  • 缺点:要求X是列满秩;求矩阵的逆比较慢
    • 改进:对于不能直接求矩阵的逆的解决方案 —— θ = ( X T X + δ 2 I d ) − 1 X T y \theta = (X^TX + \delta^2I_d)^{-1}X^Ty θ=(XTX+δ2Id)1XTy (这一步是工程实践结果,意外发现和 岭回归损失函数求偏导一样)

3 岭回归(Ridge Regression)与Lasso回归(Lasso Regression)

  • 描述/核心思想:
    • 通过损失最小二乘法的无偏性(有偏估计),以损失部分信息、降低精度为代价,提升数值稳定性泛化能力,获得回归系数更为符合实际、更可靠的回归方法
    • 特征选择
  • 特殊针对:
    • 训练样本数量少(甚至少于样本维数),即矩阵无法求逆;
    • 样本特征大量相似,即很多参数意义重复(共线性)
  • 损失函数:
    • 线性回归( J 0 = ( y − X θ ) T ( y − X θ )   o r   ∑ i = 1 m ( h θ ( x i ) − y i ) 2 J_0 = (y-X\theta)^T(y-X\theta) \ or\ \sum_{i=1}^{m}{(h_\theta (x^i ) - y^i )^2 } J0=(yXθ)T(yXθ) or i=1m(hθ(xi)yi)2),正则因子(模型参数向量的范数) * 其中m为观察数,n为变量数
    • 岭回归: J ( θ ) = J 0 + δ 2 ∑ j = 1 n θ j 2 J(\theta) = J_0 + \delta^2\sum_{j=1}^{n}\theta_j^2 J(θ)=J0+δ2j=1nθj2 θ T θ \theta^T\theta θTθ,L2范数,即高斯分布) —— 消除共线性;模的平方处理
    • Lasso回归: J ( θ ) = J 0 + δ 2 ∑ j = 1 n ∣ θ j ∣ J(\theta) = J_0 + \delta^2\sum_{j=1}^{n}|\theta_j| J(θ)=J0+δ2j=1nθj(使用模型参数向量的L1范数,即拉普拉斯分布)—— 压缩变量(降维);模的平方处理
  • 理解:
    • 上侧用梯度下降求解J0,下侧为正则项的公式
  • 差异:
    • Lasso能够实现提取有用特征、删除无效变量(即将系数设置零,直接消除影响)
    • Lasso回归计算更复杂,因为第一范数不是连续可导的

4 权衡:弹性网络回归(ElasticNet Regression)

  • ElasticNet 回归,即岭回归和Lasso技术的混合,使用 L1, L2 范数作为先验正则项训练的线性回归模型。
    • 为什么有 ElasticNet?
      • Lasso回归太过(太多特征被稀疏为0) —— 允许少量参数被稀疏(比如共线变量Lasso只选择一个,Elastic可能选择两个)
      • 岭回归也正则化的不够(回归系数衰减太慢) —— 保持正则化强度与Ridge的稳定性
  • 公式:
    • M i n ( 1 2 m [ J 0 + λ ∑ j = 1 n θ j 2 ] + λ ∑ j = 1 n ∣ θ ∣ ) Min( \frac{1}{2m} [ J_0 + \lambda \sum_{j=1}^{n} \theta_j^2 ] + \lambda \sum_{j=1}^{n} |\theta| ) Min(2m1[J0+λj=1nθj2]+λj=1nθ)
    • M i n ( 1 2 m J 0 + α ( 1 − ρ ) 2 ∣ θ ∣ ∣ 2 2 + α ρ ∣ ∣ θ ∣ ∣ 1 ) Min( \frac{1}{2m}J_0 + \frac{\alpha(1-\rho)}{2}|\theta||_2^2 + \alpha\rho ||\theta||_1 ) Min(2m1J0+2α(1ρ)θ22+αρθ1),α接近0时ElasticNet接近Lasso;当α从1到0,目标函数的稀疏解从0逐渐增加
  • 代码
from sklearn import linear_model  
#得到拟合模型,其中x_train,y_train为训练集  
ENSTest = linear_model.ElasticNetCV(alphas=[0.0001, 0.0005, 0.001, 0.01, 0.1, 1, 10], l1_ratio=[.01, .1, .5, .9, .99],  max_iter=5000).fit(x_train, y_train)  
#利用模型预测,x_test为测试集特征变量  
y_prediction = ENSTest.predict(x_test)

致谢:
高永峰_GYF(https://www.jianshu.com/p/aadad14db00e)
mantch(cnblogs.com/mantch/p/10242077.html)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值