【问题标题】:Error in caret-svm - "NAs are not allowed in subscripted assignments"caret-svm 中的错误 - “下标分配中不允许使用 NA”
【发布时间】:2017-05-26 13:04:30
【问题描述】:

专家。我是 R 的初学者。我正在尝试使用 caret-SVM 进行分类。内核是 svmPoly。 首先,我使用默认参数通过留一法交叉验证来训练模型 代码是:

ctrl <- trainControl(method = "LOOCV",
                     classProbs = T,
                     savePredictions = T,
                     repeats = 1)
modelFit <- train(group~.,data=table_svm,method="svmPoly",
                  preProc = c("center","scale"),
                  trControl = ctrl) 

最佳准确率为 80%。模型使用的最终值是 degree = 1,scale = 0.1 和 C = 1。

其次,我尝试调整参数。 代码是:

grid_svmpoly=expand.grid(degree=c(1:11),scale=seq(0,5,length.out=25),C=10^c(0:4)) 
modelFit_tune <- train(group~.,data=table_svm,method="svmPoly",
                  preProc = c("center","scale"),
                  tuneGrid=grid_svmpoly,
                  trControl = ctrl)

我收到一条错误消息:{ 中的错误: 任务 264 失败 - “下标作业中不允许使用 NA”

我检查了数据,没有发现NA。

【问题讨论】:

    标签: svm r-caret


    【解决方案1】:

    数据集中必须有一些 NA。我对此并不陌生,但专家不多。为确保内部没有 NA,首先使用以下方法将数据集转换为矩阵格式:

    x <- data.matrix(dataframe)
    

    然后使用 which() 函数在这种情况下非常方便:

    which(is.na(x)==T)
    

    我希望这将帮助您找到答案。这些值将按行顺序排列。

    如果这能解决您的问题,请告诉我。

    【讨论】:

    • 谢谢,南迪。我使用您的代码查找 NA 并得到 "integer(0)" 。
    • 我尝试使用具有相同参数的小数据集重现该问题,并且没有任何困难。我想你可能也想试试这个。因此,安装“mlbench”并且有一个数据集 Ionosphere。使用 Ionosphere 数据并运行上面的代码。它会起作用的。如果您对此有任何困难,请告诉我。
    • 谢谢你,南迪。我仍然无法弄清楚这个问题的原因。但是,将tuneGrid=grid_svmpoly 替换为tuneLength=9 后,我没有收到任何错误。准确率提高到 85%。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多