R 套索:glmnet的交叉验证

R 套索:glmnet的交叉验证,r,machine-learning,cross-validation,glmnet,R,Machine Learning,Cross Validation,Glmnet,我正在使用cv.glmnet()执行交叉验证,默认情况下10倍 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.c

我正在使用
cv.glmnet()
执行交叉验证,默认情况下
10倍

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)
但正如下面所示,我似乎没有一个计数为
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个子集上测试它。它重复这个过程,依次省略每个子集

您的数据非常稀疏,有时,训练子集会遇到此处(和中)遇到的问题。最好的解决方案是通过组合稀有类来减少响应中的类数(例如,您真的需要获得
spy
perl
的预测概率吗)


此外,如果您正在进行glmnet交叉验证并构建模型矩阵,则可以使用我编写的简化过程。

cv.glmnet
默认情况下使用N=10进行N次交叉验证。这意味着它将您的数据分成10个子集,然后在10个子集中的9个子集上训练一个模型,并在剩余的1个子集上测试它。它重复这个过程,依次省略每个子集

您的数据非常稀疏,有时,训练子集会遇到此处(和中)遇到的问题。最好的解决方案是通过组合稀有类来减少响应中的类数(例如,您真的需要获得
spy
perl
的预测概率吗)


此外,如果您正在进行glmnet交叉验证并构建模型矩阵,则可以使用我编写的优化流程。

使用级别(trainingData$V42)如果它是一个因子变量,则检查哪个因子级别在测试或训练集中没有观测值。问题可能是测试或训练数据中不存在的因子级别之一。这意味着V42存储为字符串向量。比较testdata$V42和traindata$V42的表。为什么要与testdata进行比较?这是一个10倍交叉验证,它处理我的训练数据集使用级别(trainingData$V42)(如果它是一个因子变量),并检查哪个因子级别在测试或训练集中没有观察到。问题可能是测试或训练数据中不存在的一个因子级别。这意味着V42存储为字符串向量。比较testdata$V42和traindata$V42的表。为什么要与testdata进行比较?这是一个10倍的交叉验证,它涉及到我的训练数据集eah,但我现在将尝试这样做。谢谢你的链接:是的,但我现在会尝试这样做。谢谢你的链接:
>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