Biglasso结果与hdm或glmnet不匹配

问题描述 投票:1回答:1

我一直在尝试使用R包'biglasso'处理高维数据。但是,我得到的结果与从“ hdm”或“ glmnet”获得的LASSO函数的结果不匹配。 biglasso的文档也很差。

在下面的示例中,来自hdm和glmnet的结果非常接近,但并不精确,这是可以预期的。但是,biglasso不会删除“ share”变量。我尝试了所有不同的屏幕设置,但没有任何区别。关于如何使biglasso与其他眼镜保持一致的任何想法?谢谢!

编辑:对于给定的lambda值,结果非常相似。但是每种方法似乎选择一个不同的lambda ..对于hdm来说,这是有意义的,因为它是用于因果推理的,并且与样本外预测无关。 hdm使用与Belloni等人不同的目标函数。 (2012),但我不确定cv.biglasso和cv.glmnet为何会有如此大的差异。如果我在没有筛选规则的情况下运行biglasso,则仅在CV折叠中存在随机差异的情况下,它们应该最大化同一目标函数,不是吗?

##########
## PREP ##
##########

## Load required libraries
library(hdm)
library(biglasso)
library(glmnet)

## Read automobile dataset
data(BLP)
df <- BLP[[1]]

## Extract outcome
Y <- scale(df$mpg)

## Rescale variables
df$price <- scale(df$price)
df$mpd <- scale(df$mpd)
df$space <- scale(df$space)
df$hpwt <- scale(df$hpwt)
df$share <- scale(df$share)

## Limit to variables I want, convert to matrix
df <- df[,names(df) %in% c("price","mpd","space","hpwt","share")]
df.mat <- data.matrix(df)
df.bm <- as.big.matrix(df.mat)

#########
## HDM ##
#########

set.seed(1233)
fit.hdm <- rlasso(x=df.mat, y=Y, post=FALSE, intercept=TRUE)
coef(fit.hdm)

##############
## BIGLASSO ##
##############

fit.bl <- cv.biglasso(df.bm, Y, penalty="lasso",
    family="gaussian", screen="SSR",
    seed=1233, ncores=4, nfolds=10)
coef(fit.bl)

############
## GLMNET ##
############

set.seed(1233)
fit.glmnet <- cv.glmnet(df.mat, Y, alpha=1, family="gaussian")
coef(fit.glmnet)
r machine-learning bigdata lasso-regression
1个回答
0
投票

在简历后选择“最佳” lambda基本上有两种方法:

  • 最小化CV错误(默认为{biglasso})

  • CV误差小于最小值+ 1标准误差(默认值为{glmnet}的情况下,最简约(最高的λ)的那个。)>] >>

    尝试使用coef(fit.glmnet, s = "lambda.min")使用最小值。

  • 此外,为确保可重复性,请尝试设置CV折叠而不是某些种子。 foldid中有参数glmnet()cv.ind中有参数biglasso()

© www.soinside.com 2019 - 2024. All rights reserved.