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,匹配。 请使用可用作有效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 ...
答案 0 :(得分:0)
在预测(内部使用train
或自己使用predict.train
)时,函数会为每个类概率创建新列。如果您的代码需要一个名为"no match"
的列,则它不会看到"no.match"
(这是data.frame
将其转换为的内容)并会抛出错误。