Caret反对结果标签:错误:至少有一个类级别不是有效的R变量名称

问题描述 投票:0回答:1

caret给出了以下错误。我正在训练SVM进行预测,从一个单词开始,并希望使用插入符号来调整C参数,但是:

bow.model.svm.tune <- train(Training.match ~ ., data = data.frame(
    Training.match = factor(Training.Data.old$Training.match, labels = c('no match', 'match')),
    Text.features.dtm.df) %>%
        filter(Training.Data.old$Data.tipe == 'train'),
    method = 'svmRadial',
    tuneLength = 9,
    preProc = c("center","scale"),
    metric="ROC",
    trControl = trainControl(
        method="repeatedcv",
        repeats = 5,
        summaryFunction = twoClassSummary,
        classProbs = T))    

错误:至少有一个类级别不是有效的R变量名称;这会在生成类概率时导致错误,因为变量名称将转换为no.match,match。请使用可用作有效R变量名的因子级别(请参阅?make.names获取帮助)。

原始的e1071::svm()函数没有给出问题,因此我认为在调优阶段会出现错误:

bow.model.svm.tune <- svm(Training.match ~ ., data = data.frame(
             Training.match = factor(Training.Data.old$Training.match, labels = c('no match', 'match')),
             Text.features.dtm.df) %>%
                 filter(Training.Data.old$Data.tipe == 'train'))

数据只是一个结果因子变量和TfIdf转换单词向量列表:

'data.frame':   1796 obs. of  1697 variables:
 $ Training.match          : Factor w/ 2 levels "no match","match": 2 1 1 1 1 1 1 1 2 1 ...
 $ azienda                 : num  0.12 0 0 0 0 ...
 $ bus                     : num  0.487 0 0 0 0 ...
 $ locale                  : num  0.275 0 0 0 0 ...
 $ martini                 : num  0.852 0.741 0.947 0.947 0.501 ...
 $ osp                     : num  0.339 0 0 0 0 ...
 $ ospedale                : num  0.0389 0.0676 0.0864 0.0864 0.0915 ...
r machine-learning r-caret
1个回答
0
投票

在预测时(内部使用train或自己使用predict.train),函数为每个类概率创建新列。如果你的代码需要一个名为"no match"的列,它将看不到"no.match"(这是data.frame将其转换为)并将引发错误。

© www.soinside.com 2019 - 2024. All rights reserved.