我使用cv.glmnet()
進行交叉驗證,在默認情況下10-fold
套索:交叉驗證用於glmnet
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
任何指針?
使用水平(trainingData $ V42)如果它是一個因子變量,並檢查哪個因子水平在測試或訓練集中沒有觀測值。 –
該問題可能是您的測試或培訓數據中不存在的因素水平之一 –
這意味着V42存儲爲字符串向量。比較您的測試數據$ V42和traindata $ V42的表格。 –