有人可以解释 glmnet 中的 foldid 参数的作用吗?

机器算法验证 r 套索 岭回归 网络
2022-04-06 01:09:35

我试图确定在我的函数中使用什么alphaglmnet,但帮助文件告诉我:

请注意,cv.glmnet 不会搜索 alpha 的值。应提供特定值,否则默认假定 alpha=1。如果用户也想交叉验证 alpha,他们应该使用预先计算的向量 foldid 调用 cv.glmnet,然后在对具有不同 alpha 值的 cv.glmnet 的单独调用中使用相同的折叠向量。

但是,我不明白:

  1. foldid 向量/参数是什么。
  2. 如何创建折叠向量
  3. 如何使用 foldid 参数。

对此的任何帮助将不胜感激!

2个回答

fold.id允许用户预先指定交叉验证折叠cv.glmnet例如,如果我有一些数据

x    | y    | fold.id
-----+------+--------
0    | 1    | 1
1    | 1    | 1
0    | 0    | 2
1    | 2    | 2
.    | .    | .

然后将指示的列作为fold.id参数传递给cv.glmnet将导致(例如)前两个观察值位于同一折叠中,第三和第四个观察值位于相同(不同)折叠中。

作者建议,如果您想在一些离散的集合之间进行选择α基于一个最优的一些错误的交叉验证估计λα,那么在确定每个交叉验证时,最好在每个交叉验证中使用相同的折叠结构λα.

根据Glmnet Vignette,设置 glmnet 的一种方法foldid是:

foldid<-sample(1:10,size=length(y),replace=TRUE)

然后应用于一系列 alpha:

cv1=cv.glmnet(x,y,foldid=foldid,alpha=1)
cv.5=cv.glmnet(x,y,foldid=foldid,alpha=.5)
cv0=cv.glmnet(x,y,foldid=foldid,alpha=0)

sample()函数基本上允许您在为响应变量矩阵y的长度提供的范围内(= 1:nfolds)生成一个随机数向量。通过这种方式,您将每个输入矩阵行分配给随机(但现在设置)折叠。