套索:glmnet 的交叉验证
Lasso: Cross-validation for glmnet
我正在使用 cv.glmnet()
执行交叉验证,默认情况下 10-fold
library(Matrix)
library(tm)
library(glmnet)
library(e1071)
library(SparseM)
library(ggplot2)
trainingData <- read.csv("train.csv", stringsAsFactors=FALSE,sep=",", header = FALSE)
testingData <- read.csv("test.csv",sep=",", stringsAsFactors=FALSE, header = FALSE)
x = model.matrix(as.factor(V42)~.-1, data = trainingData)
crossVal <- cv.glmnet(x=x, y=trainingData$V42, family="multinomial", alpha=1)
plot(crossVal)
我收到以下错误消息
Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs, :
one multinomial or binomial class has 1 or 0 observations; not allowed
但是如下图,我似乎没有0
或1
的观察水平。
>table(trainingData$V42)
back buffer_overflow ftp_write guess_passwd imap ipsweep land loadmodule multihop
956 30 8 53 11 3599 18 9 7
neptune nmap normal perl phf pod portsweep rootkit satan
41214 1493 67343 3 4 201 2931 10 3633
smurf spy teardrop warezclient warezmaster
2646 2 892 890 20
有什么指点吗?
cv.glmnet
默认使用 N=10 进行 N 折交叉验证。这意味着它将您的数据分成 10 个子集,然后在 10 个子集中的 9 个上训练模型并在剩余的 1 个上对其进行测试。它重复这一过程,依次忽略每个子集。
您的数据足够稀疏,有时训练子集会 运行 进入此处遇到的问题(以及 your previous question)。最好的解决方案是通过组合更罕见的 类 来减少响应中 类 的数量(您 真的 需要获得 [=11 的预测概率吗? =] 或 perl
例如)。
此外,如果您正在进行 glmnet 交叉验证并构建模型矩阵,您可以使用我写的 glmnetUtils package 来简化流程。
我正在使用 cv.glmnet()
执行交叉验证,默认情况下 10-fold
library(Matrix)
library(tm)
library(glmnet)
library(e1071)
library(SparseM)
library(ggplot2)
trainingData <- read.csv("train.csv", stringsAsFactors=FALSE,sep=",", header = FALSE)
testingData <- read.csv("test.csv",sep=",", stringsAsFactors=FALSE, header = FALSE)
x = model.matrix(as.factor(V42)~.-1, data = trainingData)
crossVal <- cv.glmnet(x=x, y=trainingData$V42, family="multinomial", alpha=1)
plot(crossVal)
我收到以下错误消息
Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs, :
one multinomial or binomial class has 1 or 0 observations; not allowed
但是如下图,我似乎没有0
或1
的观察水平。
>table(trainingData$V42)
back buffer_overflow ftp_write guess_passwd imap ipsweep land loadmodule multihop
956 30 8 53 11 3599 18 9 7
neptune nmap normal perl phf pod portsweep rootkit satan
41214 1493 67343 3 4 201 2931 10 3633
smurf spy teardrop warezclient warezmaster
2646 2 892 890 20
有什么指点吗?
cv.glmnet
默认使用 N=10 进行 N 折交叉验证。这意味着它将您的数据分成 10 个子集,然后在 10 个子集中的 9 个上训练模型并在剩余的 1 个上对其进行测试。它重复这一过程,依次忽略每个子集。
您的数据足够稀疏,有时训练子集会 运行 进入此处遇到的问题(以及 your previous question)。最好的解决方案是通过组合更罕见的 类 来减少响应中 类 的数量(您 真的 需要获得 [=11 的预测概率吗? =] 或 perl
例如)。
此外,如果您正在进行 glmnet 交叉验证并构建模型矩阵,您可以使用我写的 glmnetUtils package 来简化流程。