弹性网逻辑回归中选择最佳alpha


22

我正在使用glmnetR中的程序包通过在的网格上从0到1 选择lambda值来对医疗数据集执行弹性网逻辑回归。我的缩写代码如下:α

alphalist <- seq(0,1,by=0.1)
elasticnet <- lapply(alphalist, function(a){
  cv.glmnet(x, y, alpha=a, family="binomial", lambda.min.ratio=.001)
})
for (i in 1:11) {print(min(elasticnet[[i]]$cvm))}

对于从到每个alpha值,以为增量输出平均交叉验证误差:0.01.00.1

[1] 0.2080167
[1] 0.1947478
[1] 0.1949832
[1] 0.1946211
[1] 0.1947906
[1] 0.1953286
[1] 0.194827
[1] 0.1944735
[1] 0.1942612
[1] 0.1944079
[1] 0.1948874

根据我在文献中所读的内容,的最佳选择是使cv错误最小化。但是在整个Alpha范围内,误差有很多变化。我看到了几个局部最小值,全局最小值为。α0.1942612alpha=0.8

安全alpha=0.8吗?或者,带来的变动,我应该重新运行cv.glmnet更多的交叉验证倍(如而不是),或者是更大数量的之间的增量,并得到CV错误路径清晰的画面?10 α2010αalpha=0.01.0


5
您可能想看看caret可以对alpha和lambda进行重复cv和调整的程序包(支持多核处理!)。从内存来看,我认为glmnet文档建议您不要像在此处那样调整alpha。如果用户正在调整Alpha值(除了所提供的Lambda调整值之外),建议您将折叠项保持固定cv.glmnet

1
啊,在这里发现了这个帖子:stats.stackexchange.com/questions/69638/...
RobertF

2
尝试使用不同的时不要忘记修复foldidα
user4581 2015年

1
为了获得可复制性,切勿在cv.glmnet()未传入foldids已知随机种子创建的情况下运行。
smci

1
@amoeba看看我的回答-欢迎在l1和l2之间进行权衡取舍!
Xavier Bourret Sicotte,

Answers:


7

阐明和Elastic Net参数的含义α

不同的软件包使用不同的术语和参数,但是含义通常是相同的:

所述ř包 Glmnet使用下列定义

β0β1个ñ一世=1个ñw一世ÿ一世β0+βŤX一世+λ[1个-α||β||22/2+α||β||1个]

Sklearn的用途

w1个2ñ一世=1个ñ||ÿ-Xw||22+α×1个||w||1个+0.5×α×1个-1个×||w||22

也可以使用和进行其他参数设置一种b

为了避免混淆,我将打电话给

  • λ罚强度参数
  • 大号1个L 1 L 2和罚分之间的比率,范围从0(山脊)到1(套索)大号1个大号2

可视化参数的影响

考虑一个模拟数据集,其中由一个嘈杂的正弦曲线组成,是一个由和组成的二维特征。由于和之间的相关性,成本函数是一个狭窄的谷。ÿXX1个=XX2=X2X1个X2

下图显示了强度参数的函数,包含两个不同的比率参数的Elasticnet回归的求解路径。大号1个λ

  • 对于这两个模拟:当,解决方案是右下角的OLS解决方案,具有相关的谷形成本函数。λ=0
  • 随着增加,正则化开始,并且解趋于λ00
  • 两次仿真之间的主要区别是比率参数。大号1个
  • LHS:对于较小的比率,正则化成本函数看起来很像具有圆形轮廓的Ridge回归。大号1个
  • RHS:对于较大的比率,成本函数看起来很像具有典型菱形轮廓的Lasso回归。大号1个
  • 对于中间的比率(未显示),成本函数是两者的混合大号1个

在此处输入图片说明


了解参数的效果

引入ElasticNet是为了解决套索的一些局限性:

  • 如果变量比数据点,则,套索最多选择变量。pñp>ññ
  • 套索无法执行分组选择,尤其是在存在相关变量的情况下。它将倾向于从组中选择一个变量,而忽略其他变量

通过组合一个和一个二次罚分,我们得到了两者的优点:大号1个大号2

  • 大号1个生成稀疏模型
  • 大号2消除了对所选变量数量的限制,鼓励了分组并稳定了正则化路径。大号1个

您可以在上图直观地看到这一点,顶点的奇异点鼓励稀疏,而严格的凸边则鼓励分组

这是Hastie(ElasticNet的发明者)的图表

在此处输入图片说明

进一步阅读


2

尽管这个问题年代久远,但让我添加一些非常实际的评论。因为我不是R用户,所以我不能让代码说话,但是仍然应该可以理解。

  1. 通常,您应该只选择具有最佳CV分数的超参数(此处为)。另外,您可以选择最佳的模型并通过算术平均决策函数来形成整体。当然,这会增加运行时的复杂性。提示:有时几何平均效果更好我想这是因为决策边界更加平滑。αķF1个FķFX=1个ķ一世F一世X˚FX=ķFX=一世=1个ķF一世Xķ

  2. 重采样的优点之一是您可以检查测试分数的顺序,这是简历的分数。您不仅应始终查看平均值,还应始终查看标准偏差(它不是正态分布的,但您应该表现得好像)。通常,您将其显示为65.5%(±2.57%),以确保准确性。这样,您可以判断“小偏差”是偶然还是结构上的可能性更大。最好甚至检查整个序列。如果总是由于某种原因导致折折,您可能要重新考虑分割的方式(这表明实验设计有误,也:您是否洗牌了?)。在scikit-learn中,GridSearchCV商店中有关折叠过期的详细信息cv_results_请参阅此处)。

  3. 关于:越高,您的弹性网将具有稀疏度特征。您可以检查生成的模型的权重,越高,将设置为零更多。这是从管道中一起删除权重设置为零的属性的有用技巧(这将大大提高运行时性能)。另一个技巧是使用弹性网模型进行特征选择,然后重新训练变体。通常,由于特征之间的相互关系已被滤除,因此可以显着提高模型的性能。α大号1个α大号2大号2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.