频率主义的正则化和概率主义的边际化

学习了王天一博士关于正则化和边际化的讲解,记录笔记如下:
1、线性回归中,样本量过少或者特征因子过于精细,容易出现过拟合(overfitting)的问题,通俗地说就是模型过于复杂,削弱了其的泛化能力,正则化和边际化正好可以用来解决过拟合问题。过拟合线性具体表现为训练集模型表现好,但在测试集中模型表现不好。
2、正则化(regularization)是用于解决过拟合问题的统称,通过动态调整估计参数的取值来降低模型的复杂度,以偏差的增加为代价来换取方差的下降,
3、在线性回归里,最常见的正则化方式就是在损失函数(loss function)中添加正则化项(regularizer),而添加的正则化项 R(λ) 往往是待估计参数的 p- 范数。将均方误差和参数的范数之和作为一个整体来进行约束优化,相当于额外添加了一重关于参数的限制条件,避免大量参数同时出现较大的取值。由于正则化的作用通常是让参数估计值的幅度下降,因此在统计学中它也被称为系数收缩方法(shrinkage method)。
4、其中的 λ 是用来平衡均方误差和参数约束的超参数。当正则化项为 1- 范数时,修正结果就是 LASSO;当正则化项为 2- 范数的平方时,修正结果就是岭回归;当正则化项是 1- 范数和 2- 范数平方的线性组合 时,修正结果就是弹性网络(elastic net)。通俗地说,就是当正则化项为一次函数时为LASSO,当正则化为二次函数时为岭回归,当正则化项为一次和二次的组合时,为弹性网络。
5、LASSO正则化的结果是直接将某些属性的权重降为0;岭回归正则化的结果是衰减不同属性的权重;弹性网络是这两者的结合,可能会缩减某些属性,也可能会降低属性的权重系数。
6、对正则化以上的认识都来自于频率主义的视角。在上一季的专栏中我曾介绍过,从概率的角度看,岭回归是当参数 w 满足正态分布时,用最大后验概率进行估计得到的结果;LASSO 是当参数 w 满足拉普拉斯分布时,用最大后验概率进行估计得到的结果。
7、在贝叶斯概率主义的视角下,起到同样作用的处理方式叫边际化,也就是将未知随机变量按照其概率分布积分成常量。利用贝叶斯概率来确定最优参数的步骤可以归纳如下:求解的对象是已知训练数据时,测试数据的条件概率 p(y ∣y),要计算这个条件概率就要对所有未知的参数和超参数进行积分,以消除这些变量。
8、频率主义的正则化只是引入了一个正则化系数 λ,但 λ 的最优值到底是多少呢?只能靠重复试验确定,这就需要用验证数据集(validation set)来评估每个备选 λ 的最优性。相比之下,贝叶斯主义的边际化就简化了最优化的过程,让边际似然概率最大的超参数就是最优的超参数。这样做的好处就是所有数据都可以用于训练,不需要额外使用验证集,这在数据较少时是非常有用的。
9、在编程中,很多第三方的 Python 库都可以直接实现不同的正则化处理。在 Scikit-learn 库中,线性模型模块 linear_model 中的 Lasso 类和 Ridge 类就可以实现 l1正则化和 l2正则化。
from sklearn.linear_model import LinearRegression,Lasso,Ridge,LassoCV,RidgeCV
10、LASSO 和岭回归的均方误差都高于普通线性回归的均方误差,LASSO 的性能还要劣于岭回归的性能,这是抑制过拟合和降低误差必然的结果。边际化对未知的参数和超参数进行积分以消除它们的影响,天然具有模型选择的功能。正则化的最优参数通常会通过交叉验证进行模型选择来产生,也就是在从不同数据子集上计算出的不同 λ 中择优取之。
11、在合适的 λ下,Lasso回归(L1正则会)会使得一部分自变量特征对应的回归系数变成0,这种特性使Lasso能够具有特征筛选的功能;而Ridge回归(L2正则化)会使所有自变量特征对应的回归系数变得很小但不会为0,因为不会为0所以Ridge回归不能用作特征选择
无论是L1正则化还是L2正则化,选择合适的 λ都是十分关键重要的事情;多采用交叉验证的方法选择合适的惩罚系数(把数据分为训练集和测试集,在训练集中采用交叉验证);也可以采用通过验证集来选择合适的惩罚系数(会把数据划分为训练集、验证集和测试集,在验证集中选择选择惩罚系数)
12、正则化处理示例:

Lasso回归模型 惩罚系数随alpha的变化

n_alphas = 200
alphas = np.linspace(0.01,500,n_alphas)
coefs = []
for a in alphas:
lasso = Lasso(alpha = a,fit_intercept=False,max_iter=10000)
lasso.fit(X_train,y_train)
coefs.append(lasso.coef_)

Ridge回归模型 惩罚系数随alpha的变化,这里的alpha对应上述文字部分的lambda

n_alphas = 200
alphas = np.logspace(-5, 5, n_alphas)
coefs = []
for a in alphas:
ridge = Ridge(alpha = a,fit_intercept=False)
ridge.fit(X_train,y_train)
coefs.append(ridge.coef_)

plt.figure(figsize = (8,6))
ax = plt.gca()
ax.plot(alphas,coefs)
ax.set_xscale(“log”)
plt.title(“Ridge coefficient as a function of alpha”)
plt.xlabel(“alhpa”)
plt.ylabel(“coefs”)
plt.show()
plt.close()

在这里插入图片描述
在这里插入图片描述
参考:https://zhuanlan.zhihu.com/p/665349740

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归去来?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值