Questions tagged «glmnet»

套索和弹性网正则化广义线性模型的R包。

3
如何使用glmnet呈现套索的结果?
我想从30个独立变量中找到连续因变量的预测变量。我正在使用在R 中的glmnet包中实现的Lasso回归。这是一些伪代码: # generate a dummy dataset with 30 predictors (10 useful & 20 useless) y=rnorm(100) x1=matrix(rnorm(100*20),100,20) x2=matrix(y+rnorm(100*10),100,10) x=cbind(x1,x2) # use crossvalidation to find the best lambda library(glmnet) cv <- cv.glmnet(x,y,alpha=1,nfolds=10) l <- cv$lambda.min alpha=1 # fit the model fits <- glmnet( x, y, family="gaussian", alpha=alpha, nlambda=100) res <- predict(fits, …

5
在R中使用Lars(或glmnet)软件包中的LASSO进行变量选择
抱歉,这个问题有点基本。 我正在寻找在R中的多元线性回归模型中使用LASSO变量选择的方法。我有15个预测变量,其中之一是分类的(会引起问题吗?)。设置好和我使用以下命令:ÿXxxÿyy model = lars(x, y) coef(model) 我的问题是我何时使用coef(model)。这将返回一个包含15行的矩阵,每次添加一个额外的预测变量。但是,没有建议选择哪种模型。我错过了什么吗?有没有办法让我的lars包返回一个“ 最佳 ”模型? 还有其他文章建议使用glmnet代替,但这似乎更复杂。尝试如下,使用相同的和。我在这里错过了什么吗?: ÿXxxÿyy cv = cv.glmnet(x, y) model = glmnet(x, y, type.gaussian="covariance", lambda=cv$lambda.min) predict(model, type="coefficients") 最后一条命令返回我的变量列表,大多数变量带有系数,尽管有些为= 0。这是LASSO 选择的“ 最佳 ”模型的正确选择吗?然后,如果我用所有具有系数的变量拟合线性模型,则not=0得到的系数估计值非常相似,但略有不同。有什么区别的原因吗?用LASSO选择的这些变量重新拟合线性模型并将其作为我的最终模型是否可以接受?否则,我将看不到任何有意义的p值。我错过了什么吗? 是否 type.gaussian="covariance" 确保glmnet使用多元线性回归? 变量的自动归一化是否会完全影响系数?有什么方法可以在LASSO程序中包括交互项? 我希望更多地使用此过程来演示如何使用LASSO,而不是将其实际用于任何重要的推断/预测(如果发生任何变化)的任何模型。 感谢您抽出时间来阅读。对于LASSO / lars / glmnet的任何一般性评论也将不胜感激。

2
如何解释glmnet?
我正在尝试使用约60个预测变量和30个观察值来拟合多元线性回归模型,所以我使用glmnet软件包进行正则回归,因为p> n。 我一直在研究文档和其他问题,但仍然无法解释结果,这是示例代码(为简化起见,有20个预测变量和10个观察值): 我创建了一个矩阵x,其中num行=观察值,cols =预测变量,向量y表示响应变量 > x=matrix(rnorm(10*20),10,20) > y=rnorm(10) 我适合一个glmnet模型,将alpha保留为默认值(套索罚分= 1) > fit1=glmnet(x,y) > print(fit1) 我了解随着lambda值的降低(即罚款),我得到了不同的预测 Call: glmnet(x = x, y = y) Df %Dev Lambda [1,] 0 0.00000 0.890700 [2,] 1 0.06159 0.850200 [3,] 1 0.11770 0.811500 [4,] 1 0.16880 0.774600 . . . [96,] 10 0.99740 0.010730 [97,] …

1
使用glmnet进行甲基化数据的特征选择和建模(p >> N)
我想使用GLM和Elastic Net来选择那些相关功能+建立一个线性回归模型(即预测和理解,因此最好保留相对较少的参数)。输出是连续的。这是每基因50的情况。我一直在阅读有关该软件包的信息,但是我不确定要执行的步骤:200002000020000505050glmnet 执行CV选择lambda: cv <- cv.glmnet(x,y,alpha=0.5) (Q1)给定输入数据,您会选择其他alpha值吗? (Q2)在建立模型之前,我还需要做其他事情吗? 拟合模型: model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min) (Q3)有什么比“协方差”更好的选择? (Q4)如果CV选择了lambda,为什么需要此步骤nlambda=? (Q5)使用lambda.min还是更好lambda.1se? 获取系数,看看哪些参数掉了(“。”): predict(model, type="coefficients") 在帮助页面有很多种predict方法(例如predict.fishnet,predict.glmnet,predict.lognet等)。但是,正如我在一个示例中看到的那样,任何“简单”的预测都是如此。 (Q6)我应该用predict或者predict.glmnet还是其他? 尽管我已经读过有关正则化方法的文章,但我在R和这些统计软件包中还是一个新手,因此很难确定我是否正在使我的问题适应代码。任何建议都将受到欢迎。 更新 基于 “如前所述,类train的对象包含一个称为的元素finalModel,这是具有通过重采样选择的调整参数值的拟合模型。该对象可以按传统方式用于生成新样本的预测,模型的预测功能。” 使用caret调整α和拉姆达: trc = trainControl(method=cv, number=10) fitM = train(x, y, trControl = trC, method="glmnet") 是否fitM取代先前的步骤2?如果是这样,如何立即指定glmnet选项(type.gaussian="naive",lambda=cv$lambda.min/1se)? 接下来的predict步骤,我可以替换model为fitM吗? 如果我做 trc = trainControl(method=cv, number=10) fitM = train(x, y, trControl = trC, method="glmnet") …

2
为什么glmnet岭回归给我的答案与手动计算不同?
我正在使用glmnet计算岭回归估计值。我得到了一些结果,使我对glmnet确实在做我认为做的事情感到怀疑。为了验证这一点,我编写了一个简单的R脚本,在其中比较了Solve和glmnet中进行的岭回归的结果,两者之间的区别非常明显: n <- 1000 p. <- 100 X. <- matrix(rnorm(n*p,0,1),n,p) beta <- rnorm(p,0,1) Y <- X%*%beta+rnorm(n,0,0.5) beta1 <- solve(t(X)%*%X+5*diag(p),t(X)%*%Y) beta2 <- glmnet(X,Y, alpha=0, lambda=10, intercept=FALSE, standardize=FALSE, family="gaussian")$beta@x beta1-beta2 差异的范数通常约为20,这不可能是由于数值算法不同而引起的,我一定做错了。glmnet为了获得与ridge相同的结果,我必须设置哪些设置?

1
为什么glmnet使用Zou&Hastie原始论文中的“幼稚”弹性网?
L=1n∥∥y−Xβ∥∥2+λ1∥β∥1+λ2∥β∥22,L=1n‖y−Xβ‖2+λ1‖β‖1+λ2‖β‖22,\mathcal L = \frac{1}{n}\big\lVert y - X\beta\big\rVert^2 + \lambda_1\lVert \beta\rVert_1 + \lambda_2 \lVert \beta\rVert^2_2,β^∗=(1+λ2)β^.β^∗=(1+λ2)β^.\hat\beta^* = (1+\lambda_2)\hat\beta. 但是,随后的glmnet论文Friedman,Hastie,&Tibshirani(2010)通过坐标下降的广义线性模型的正则化路径没有使用这种重新缩放,只是有一个简短的脚注说 Zou和Hastie(2005)将此惩罚称为幼稚的弹性网,并且更喜欢重新缩放的版本,他们称之为弹性网。我们在这里放弃这种区别。 那里(或在Hastie等人的任何教科书中)没有给出进一步的解释。我觉得有些困惑。难道作者离开了重新调节,因为他们认为这是过于特设?因为它在一些进一步的实验中表现更差?因为不清楚如何将其归纳为GLM案例?我不知道。但是无论如何,此glmnet软件包从那时起变得非常受欢迎,所以我的印象是,如今没有人使用Zou&Hastie的重新缩放,并且大多数人甚至都没有意识到这种可能性。 问题:毕竟,这是一个好主意还是一个坏主意? 使用glmnet参数化后,Zou&Hastie重缩放比例应为β^∗=(1+λ(1−α))β^.β^∗=(1+λ(1−α))β^.\hat\beta^* = \big(1+\lambda(1-\alpha)\big)\hat\beta.

3
带有交互作用项的LASSO-主效应缩小到零可以吗?
LASSO回归将系数缩小为零,从而有效地提供了模型选择。我相信在我的数据中,名义协变量和连续协变量之间存在有意义的相互作用。但是,真实模型的“主要影响”不一定有意义(非零)。当然我不知道,因为真正的模型是未知的。我的目标是找到真实的模型并尽可能地预测结果。 我了解到,在建立交互之前,经典的建模方法总是会包含主要效果。因此,如果在同一模型中存在协变量的交互作用,那么就不会有没有两个协变量和的主效应的模型。因此,该功能会 仔细选择模型术语(例如,基于后向或前向AIC)以遵守该规则。XXXžžZX* ZX∗žX*ZstepR LASSO的工作方式似乎有所不同。由于所有参数都是不利的,因此毫无疑问会发生这样的情况,即主效应缩小为零,而最佳(例如,交叉验证)模型的交互作用为非零。这是我特别为我的数据发现当使用R的glmnet软件包。 我收到了基于上面引用的第一条规则的批评,即,我最终的交叉验证的套索模型不包括一些非零交互的相应主效应项。但是,在这种情况下,此规则似乎有些奇怪。最终的问题是真实模型中的参数是否为零。假设它是,但交互作用为非零,则LASSO可能会识别出这一点,从而找到正确的模型。实际上,由于该模型不包含真正为零的主效应(实际上是噪声变量),因此根据该模型进行的预测似乎更为精确。 我是否可以基于此理由驳斥批评,还是应该采取一些预防措施,使LASSO在交互作用术语之前确实包含主要作用?

2
在弹性净回归中,为什么lambda“与最小值之间的标准误差之内”是lambda的推荐值?
我了解lambda在弹性净回归中扮演什么角色。而且我可以理解为什么要选择lambda.min,即将交叉验证错误最小化的lambda值。 我的问题是在统计资料中建议在哪里使用lambda.1se,即lambda的值可将CV误差加一个标准误差减到最小?我似乎找不到正式的引文,甚至找不到为什么这通常很有价值的原因。我知道这是一个限制性更强的正则化方法,会将参数进一步缩小为零,但我并不总是确定lambda.1se比lambda.min更好的选择。有人可以帮忙解释一下吗?

2
弹性网逻辑回归中选择最佳alpha
我正在使用glmnetR中的程序包通过在的网格上从0到1 选择lambda值来对医疗数据集执行弹性网逻辑回归。我的缩写代码如下:αα\alpha 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.00.00.01.01.01.00.10.10.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范围内,误差有很多变化。我看到了几个局部最小值,全局最小值为。αα\alpha0.1942612alpha=0.8 安全alpha=0.8吗?或者,带来的变动,我应该重新运行cv.glmnet更多的交叉验证倍(如而不是),或者是更大数量的之间的增量,并得到CV错误路径清晰的画面?10 α202020101010αα\alphaalpha=0.01.0

2
插入符号训练对glmnet是否对alpha和lambda交叉验证?
R caret包是否同时针对模型alpha和模型lambda进行交叉验证glmnet?运行此代码, eGrid <- expand.grid(.alpha = (1:10) * 0.1, .lambda = (1:10) * 0.1) Control <- trainControl(method = "repeatedcv",repeats = 3,verboseIter =TRUE) netFit <- train(x =train_features, y = y_train, method = "glmnet", tuneGrid = eGrid, trControl = Control) 培训日志如下所示。 Fold10.Rep3: alpha=1.0, lambda=NA 什么lambda=NA意思

1
从该套索图得出的结论(glmnet)
以下是使用mtcarsR中设置的数据mpg作为DV以及其他变量作为预测变量的具有默认alpha(1,因此为lasso)的glmnet的图。 glmnet(as.matrix(mtcars[-1]), mtcars[,1]) 我们可以从这个图得出什么结论对于不同的变量,尤其是am,cyl和wt(红色,黑色和淡蓝色线)?我们将如何用输出表达要发布的报告中的内容? 我想到了以下几点: wt是的最重要的预测指标mpg。它对产品产生负面影响mpg。 cyl是的弱否定指标mpg。 am可能是的积极预测指标mpg。 其他变量不是的可靠预测指标mpg。 感谢您对此的想法。 (注意:cyl是黑线,直到非常接近它才达到0。) 编辑:以下是plot(mod,xvar ='lambda'),它按与上图相反的顺序显示x轴: (附言:如果您发现此问题有趣/重要,请对其进行投票;)

1
插入符号和系数(glmnet)
我对利用插入符号对特定数据集进行推断感兴趣。是否可以执行以下操作: 产生我在插入符号中训练过的glmnet模型的系数。我想使用glmnet是因为固有的功能选择,因为我不相信glm有吗? 除了ROC指标之外,还有其他指标可以用来评估模型的拟合度吗?如调整后的?R2R2R^2 该分析的目的是对特定变量的影响进行推断,而不是进行预测。我只是喜欢插入符号包,因为到目前为止使用矩阵很容易。
19 caret  glmnet 

2
GLMNET的重要性不一
我正在研究使用套索作为选择特征并将预测模型与二值目标拟合的方法。以下是我正在尝试使用正则化逻辑回归的方法的一些代码。 我的问题是我得到一组“重要”变量,但是我能够对这些变量进行排序以估计每个变量的相对重要性吗?为此,可以通过绝对值对系数进行标准化(我知道它们通过coef函数以原始可变比例显示)?如果是这样,如何进行(使用x和y的标准偏差)标准化回归系数。 样本代码: library(glmnet) #data comes from #http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic) datasetTest <- read.csv('C:/Documents and Settings/E997608/Desktop/wdbc.data.txt',head=FALSE) #appears to use the first level as the target success datasetTest$V2<-as.factor(ifelse(as.character(datasetTest$V2)=="M","0","1")) #cross validation to find optimal lambda #using the lasso because alpha=1 cv.result<-cv.glmnet( x=as.matrix(dataset[,3:ncol(datasetTest)]), y=datasetTest[,2], family="binomial", nfolds=10, type.measure="deviance", alpha=1 ) #values of lambda used histogram(cv.result$lambda) #plot of …

5
cv.glmnet结果的可变性
我cv.glmnet用来查找预测变量。我使用的设置如下: lassoResults&lt;-cv.glmnet(x=countDiffs,y=responseDiffs,alpha=1,nfolds=cvfold) bestlambda&lt;-lassoResults$lambda.min results&lt;-predict(lassoResults,s=bestlambda,type="coefficients") choicePred&lt;-rownames(results)[which(results !=0)] 为了确保结果是可重复我set.seed(1)。结果变化很大。我运行了完全相同的代码100,以查看结果的可变性。在98/100次运行中,总是选择一个特定的预测变量(有时仅靠预测变量);选择其他预测变量(系数非零)通常为50/100次。 因此对我来说,每次交叉验证运行时,都可能会选择一个不同的最佳lambda,因为折叠的初始随机性很重要。其他人已经看到了这个问题(CV.glmnet结果),但是没有建议的解决方案。 我在想,一个显示98/100的图像可能与所有其他图像高度相关吗?如果我只是运行LOOCV(),结果的确稳定,但是我很好奇为什么当时它们是如此可变。fold-size=nfold-size=n\text{fold-size} = nnfold&lt;nnfold&lt;n\text{nfold} < n

1
嵌套交叉验证后如何建立最终模型并调整概率阈值?
首先,为发布一个已经在这里,这里,这里,这里,这里详细讨论过的问题的道歉,并用于重新加热旧主题。我知道@DikranMarsupial已经在帖子和期刊论文中详细介绍了这个主题,但是我仍然感到困惑,从这里的类似帖子数量来看,这仍然是其他人难以理解的事情。我还应该指出,我在这个话题上的矛盾加剧了我的困惑。您还应该知道我本来是物理学家,而不是统计学家,所以我在这方面的专业知识有限。我正在写一篇期刊论文,其中我想使用嵌套的CV来评估最终模型所期望的性能。在我的领域,这是第一个。(我们几乎从不使用任何是我领域中强大的简历的一种形式,但要用神经网络和增强型决策树的研究成果来愉快地抽出论文!)因此,有一个非常透彻和清晰的理解非常重要,这样我就不会搞砸和传播对我的社区来说是一个错误的过程,可能需要多年才能学会!谢谢!关于这个问题... 嵌套交叉验证后如何构建最终模型? 我正在训练一个具有L1和L2正则化的简单glmnet模型。快速,简单和可解释。我执行特征中心,缩放和Box-Cox转换,以使特征分布均值中心,标准化并且有点像高斯型。我在交叉验证中执行此步骤,以防止信息泄漏。纯粹是因为我的硬件速度非常慢,而且我无法使用更多的CPU资源,所以在特征预处理之后,我还会在CV中执行基于过滤器的快速特征选择。我正在使用随机网格搜索来选择alpha和lambda超参数。我知道我不应该通过CV循环获得此估算值。我知道内部CV回路用于模型选择(在这种情况下,是最佳超参数),而外部回路则用于模型评估,即内部CV和外部CV具有两个不同的用途,这些用途常常被错误地混为一谈。(到目前为止,我还好吗?) 现在,我发布的链接建议“考虑交叉验证的方法是估计使用构建模型的方法获得的性能,而不是估计模型的性能”。鉴于此,我应该如何解释嵌套CV过程的结果? 我读过的建议似乎表明以下问题---如果这是错误的,请纠正我:内部CV是允许我选择glmnet模型的最佳alpha和lambda超参数的机制的一部分。如果我完全按照内部CV中所使用的过程(包括超参数调整)并使用整个数据集构建最终模型,则外部CV会告诉我可以从最终模型中获得的估计值。即,超参数调整是“用于构建模型的方法”的一部分。这是正确的吗?因为这使我感到困惑。在其他地方,我已经看到了构建要部署的最终模型的过程涉及使用固定值对整个数据集进行训练使用CV选择的超参数。在此,“用于建立模型的方法”不包括调整。那是什么呢?在某个时候,将选择最佳超参数并将其固定以构建最终模型!哪里?怎么样?如果我的内循环是CV的5倍,而我的外循环是CV的5倍,并且我在内部CV中选择了100个测试点作为随机网格搜索的一部分,那么我实际训练了几次glmnet模型?(100 * 5 * 5)+ 1作为最终版本,还是我不知道还有更多步骤? 基本上,我需要对如何从嵌套CV解释性能估计以及如何构建最终模型进行非常清晰的描述。 我还想知道选择概率阈值的适当程序,以将最终的glmnet模型的概率分数转换为(二进制)类标签---需要另一个CV循环吗?

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.