标签: lasso-regression

glmmLasso中随机效应的结构

我想对一组360个观测值进行约150个固定效果变量和7个随机效果变量之间的模型选择。我决定将gla​​ssoLasso与Lasso过程一起用于混合模型。我没有进行大量研究,无法找到可比模型的一些例子,但没有成功。这是我的数据样本:

    > str(RHI_12)
'data.frame':   350 obs. of  164 variables:
 $ RHI_counts_12   : int  0 14 1 3 2 2 2 0 0 1 ...
 $ Site        : Factor w/ 6 levels "14_metzerlen",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Location             : Factor w/ 30 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Dist_roost      : num  0.985 0.88 0.908 0.888 0.89 ...
 $ Natural_light   : num  -0.194 -0.194 -0.194 -0.194 …
Run Code Online (Sandbox Code Playgroud)

random effects lasso-regression model-comparison

5
推荐指数
0
解决办法
600
查看次数

为什么 R 中的 grpreg 库和 gglasso 库对于 LASSO 组给出不同的结果?

我一直在尝试使用 LASSO 进行无监督特征选择(通过删除类列)。数据集包括分类(因子)和连续(数字)变量。链接在这里。我构建了一个设计矩阵,使用model.matrix()它为每个级别的分类变量创建虚拟变量。

dataset <- read.xlsx("./hepatitis.data.xlsx", sheet = "hepatitis", na.strings = "")
names_df <- names(dataset)
formula_LASSO <- as.formula(paste("~ 0 +", paste(names_df, collapse = " + ")))
LASSO_df <- model.matrix(object = formula_LASSO, data = dataset, contrasts.arg = lapply(dataset[ ,sapply(dataset, is.factor)], contrasts, contrasts = FALSE ))

### Group LASSO using gglasso package
gglasso_group <- c(1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, …
Run Code Online (Sandbox Code Playgroud)

r lasso-regression feature-selection unsupervised-learning

5
推荐指数
1
解决办法
1125
查看次数

调整 LASSO 模型并使用 tidymodels 进行预测

我想对 LASSO 算法执行惩罚选择并使用 预测结果tidymodels。我将使用波士顿住房数据集来说明这个问题。

library(tidymodels)
library(tidyverse)
library(mlbench)

data("BostonHousing")

dt <- BostonHousing
Run Code Online (Sandbox Code Playgroud)

我首先将数据集分成训练/测试子集。

dt_split <- initial_split(dt)
dt_train <- training(dt_split)
dt_test <- testing(dt_split)
Run Code Online (Sandbox Code Playgroud)

使用recipe包定义预处理。

rec <- recipe(medv ~ ., data = dt_train) %>%
  step_center(all_predictors(), -all_nominal()) %>% 
  step_dummy(all_nominal()) %>% 
  prep()
Run Code Online (Sandbox Code Playgroud)

模型和工作流程的初始化。我用的是glmnet发动机。mixture = 1意味着我选择 LASSO 惩罚,并且penalty = tune()意味着我稍后将使用交叉验证来选择最佳惩罚参数lambda

lasso_mod <- linear_reg(mode = "regression",
                        penalty = tune(),
                        mixture = 1) %>% 
  set_engine("glmnet")

wf <- workflow() %>%
  add_model(lasso_mod) %>%
  add_recipe(rec)
Run Code Online (Sandbox Code Playgroud)

准备分层5折交叉验证和惩罚网格:

folds <- rsample::vfold_cv(dt_train, …
Run Code Online (Sandbox Code Playgroud)

r machine-learning lasso-regression tidymodels

5
推荐指数
1
解决办法
3656
查看次数

我们如何为glmnet指定自定义lambda序列

我是该glmnet软件包的新手R,并希望lambda根据已发布的研究论文中的建议指定一个glmnet.cv函数.文档表明我们可以提供lambdas作为参数的递减序列.但是,在文档中没有如何执行此操作的示例.

如果有人可以建议如何去做,那将是非常感激的.我是否将100奇数值(默认值nlambda)的向量传递给函数?如果有的话,这个向量的最小值和最大值应该有什么限制?此外,是他们的事情要记住有关nvars,nobs等等,同时指定载体?

提前致谢.

parameters r lasso-regression glmnet hyperparameters

4
推荐指数
1
解决办法
3882
查看次数

glmnet如何处理NA值?

如何glmnet在R包"glmnet"处理NA值?

或者它不能容忍NA值?

r lasso-regression glmnet na

4
推荐指数
1
解决办法
5533
查看次数

scikit-learn 的 LassoCV 的评分指标

我正在使用 scikit-learn 的LassoCV函数。在交叉验证期间,默认使用什么评分指标?

我希望交叉验证基于“均方误差回归损失”。可以将这一指标与 LassoCV 一起使用吗?人们可以为LogisticRegressionCV指定一个评分指标,所以 LassoCV 也可以吗?

python lasso-regression scikit-learn cross-validation

4
推荐指数
1
解决办法
3457
查看次数

蟒蛇学习。为什么我只在第一次收到警告?

我只是第一次收到警告。这是正常的吗?

>>> cv=LassoCV(cv=10).fit(x,y)
C:\Python27\lib\site-packages\scikit_learn-0.14.1-py2.7-win32.egg\sklearn\linear_model\coordinate_descent.py:418: UserWarning: Objective did not converge. You might want to increase the number of iterations
  ' to increase the number of iterations')
>>> cv=LassoCV(cv=10).fit(x,y) 
>>> 
Run Code Online (Sandbox Code Playgroud)

python lasso-regression scikit-learn

3
推荐指数
1
解决办法
4911
查看次数

lambda.1se不在错误的一个标准错误中

在函数的文档中cv.glmnet(),给出了:

lambda.1se:
lambda的最大值,以使误差在最小值的1个标准误差内。

这意味着lambda.1se给出lambda,从而给出一个误差(cvm),该误差与最小误差相差一个标准误差。

因此,在尝试检查这一事实时:库中
存在一个数据集。我使用套索执行了交叉验证:BostonMASS

x = model.matrix(crim~.-1,data=Boston)#-1 for removing the intercept column
y = Boston$crim
cv.lasso = cv.glmnet(x,y,type.measure = "mse",alpha=1)
Run Code Online (Sandbox Code Playgroud)

而出来的价值cv.lasso$lambda.min是:

> cv.lasso$lambda.min
[1] 0.05630926
Run Code Online (Sandbox Code Playgroud)

并且,值cv.lasso$lambda.1se是:

> cv.lasso$lambda.1se
[1] 3.375651
Run Code Online (Sandbox Code Playgroud)

现在,看看这个:

> std(cv.lasso$cvm)
[1] 0.7177808
Run Code Online (Sandbox Code Playgroud)

std函数是哪里,它返回插入其中的值的标准错误。1
的最小值cvm可以找到:

> cv.lasso$cvm[cv.lasso$lambda==cv.lasso$lambda.min]
[1] 42.95009
Run Code Online (Sandbox Code Playgroud)

因此,我们将标准误差添加到的值,cvm 得到:

> 42.95009+0.7177808
[1] 43.66787
Run Code Online (Sandbox Code Playgroud)

即使没有lambda与此值对应的cvm值,我们也可以根据现有数据得出一个想法:
在此处输入图片说明

这意味着lambda.1se应该在0.4784899和0.4359821之间。但这绝对不是。因此,有种直觉表明我在这里犯了一个错误。你能帮我指出这一点吗?


1:定义std: …

r lasso-regression cross-validation

3
推荐指数
1
解决办法
2265
查看次数

Rcpp 评估错误:下标越界

我想在Rcpp代码中使用“glasso”包,cpp代码如下:

#include <RcppArmadillo.h>
 // [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
// [[Rcpp::export]]
List sec(arma::mat x,double lam){
Environment gla("package:glasso");
Function gl=gla["glasso"];
double thr=1e-2;bool approx=0;
bool diag=1; bool nu=0;
List bc(5);
bc=gl(x,lam,nu,thr,thr,approx,approx,nu,nu,diag);
return(bc);}
Run Code Online (Sandbox Code Playgroud)

但是,当我在 R 中获取代码时,出现以下错误。

set.seed(100)
x<-matrix(rnorm(50*10),ncol=10)
s<- var(x)
library(glasso)
a<-sec(s, 0.01)
"Error in sec(s, 0.01) : Evaluation error: subscript out of bounds."
Run Code Online (Sandbox Code Playgroud)

我检查了“glasso”包的文档,结果列表包含 5 个值,所以我很困惑问题出在哪里。

c++ r lasso-regression rcpp

3
推荐指数
1
解决办法
255
查看次数

在 R tidymodels 中尝试的 LASSO 模型中一致的“错误:为该步骤选择的所有列都应该是数字”

尝试运行我的第一个 LASSO 模型并遇到了一些问题。我有一个医学数据集,试图从大约 60 个预测变量中预测二分结果(疾病)。在出现错误“为该步骤选择的所有列都应该是数字”之前,我已经调整了网格,尽管在配方阶段已经将它们全部转换为虚拟变量。我减少了预测变量的数量,看看这是否会改变任何东西,但似乎并没有解决它。这种结果并不常见,大约有 3% 的病例出现,所以我不知道这是否会影响任何事情。代码如下

分为测试和训练数据并按疾病分层

set.seed(123)
df_split <- initial_split(df, strata = disease)
df_train <- training(df_split)
df_test <- testing(df_split)
Run Code Online (Sandbox Code Playgroud)

创建验证集

set.seed(234)
validation_set <- validation_split(df_train,
                                   strata = dfPyVAN,
                                   prop = 0.8)
Run Code Online (Sandbox Code Playgroud)

构建模型

df_model <- 
  logistic_reg(penalty = tune(), mixture = 1) %>% 
  set_engine("glmnet")
Run Code Online (Sandbox Code Playgroud)

创建食谱

df_recipe <- 
  recipe(dfPyVAN ~ ., data = df_train) %>% 
  step_medianimpute(all_predictors()) %>% 
  step_dummy(all_nominal(), -all_outcomes()) %>% 
  step_zv(all_predictors()) %>% 
  step_normalize(all_predictors())
Run Code Online (Sandbox Code Playgroud)

创建工作流程

df_workflow <- 
  workflow() %>% 
  add_model(df_model) %>% 
  add_recipe(df_recipe)
Run Code Online (Sandbox Code Playgroud)

要调整的惩罚值网格

df_reg_grid <- tibble(penalty = 10^seq(-4, -1, length.out = 30))
Run Code Online (Sandbox Code Playgroud)

训练和调整模型 …

r lasso-regression tidymodels

3
推荐指数
1
解决办法
2252
查看次数