支持向量机训练插入错误kernlab类概率计算失败;返回NAs

支持向量机训练插入错误kernlab类概率计算失败;返回NAs,r,testing,r-caret,R,Testing,R Caret,我有一些数据和Y变量是一个因素-好或坏。我正在使用“caret”包中的“train”方法构建一个支持向量机。使用“训练”功能,我能够最终确定各种调整参数的值,并得到最终的支持向量机。对于测试数据,我可以预测“类”。但是,当我试图预测测试数据的概率时,我得到的误差小于(例如,我的模型告诉我,测试数据中的第一个数据点有y='good',但我想知道获得“good”的概率是多少…通常在支持向量机的情况下,模型将计算预测概率。如果y变量有2个结果,则模型将预测每个结果的概率。具有最大值的结果m概率被视为最

我有一些数据和Y变量是一个因素-好或坏。我正在使用“caret”包中的“train”方法构建一个支持向量机。使用“训练”功能,我能够最终确定各种调整参数的值,并得到最终的支持向量机。对于测试数据,我可以预测“类”。但是,当我试图预测测试数据的概率时,我得到的误差小于(例如,我的模型告诉我,测试数据中的第一个数据点有y='good',但我想知道获得“good”的概率是多少…通常在支持向量机的情况下,模型将计算预测概率。如果y变量有2个结果,则模型将预测每个结果的概率。具有最大值的结果m概率被视为最终解)

示例代码如下所示

library(caret)
trainset <- data.frame( 
     class=factor(c("Good",    "Bad",   "Good", "Good", "Bad",  "Good", "Good", "Good", "Good", "Bad",  "Bad",  "Bad")),
     age=c(67,  22, 49, 45, 53, 35, 53, 35, 61, 28, 25, 24))

testset <- data.frame( 
     class=factor(c("Good",    "Bad",   "Good"  )),
    age=c(64,   23, 50))



library(kernlab)
set.seed(231)

### finding optimal value of a tuning parameter
sigDist <- sigest(class ~ ., data = trainset, frac = 1)
### creating a grid of two tuning parameters, .sigma comes from the earlier line. we are trying to find best value of .C
svmTuneGrid <- data.frame(.sigma = sigDist[1], .C = 2^(-2:7))

set.seed(1056)
svmFit <- train(class ~ .,
                data = trainset,
                method = "svmRadial",
                preProc = c("center", "scale"),
                tuneGrid = svmTuneGrid,
                trControl = trainControl(method = "repeatedcv", repeats = 5))

### svmFit finds the optimal values of tuning parameters and builds the model using the best parameters

### to predict class of test data
predictedClasses <- predict(svmFit, testset )
str(predictedClasses)


### predict probablities but i get an error
predictedProbs <- predict(svmFit, newdata = testset , type = "prob")
head(predictedProbs)
“ksvm”类的支持向量机对象

SV类型:C-svc(分类) 参数:成本C=1

高斯径向基核函数。 超参数:sigma=0.72640759446315

支持向量数:9

目标函数值:-5.6994
培训错误:0.083333

在列车控制语句中,您必须指定是否要返回类概率
classProbs=TRUE

svmFit <- train(class ~ .,
    data = trainset,
    method = "svmRadial",
    preProc = c("center", "scale"),
    tuneGrid = svmTuneGrid,
    trControl = trainControl(method = "repeatedcv", repeats = 5, 
classProbs =  TRUE))

predictedClasses <- predict(svmFit, testset )
predictedProbs <- predict(svmFit, newdata = testset , type = "prob")
编辑
要回答您的新问题,您可以使用
alphaindex(svmFit$finalModel)
和系数
coef(svmFit$finalModel)

访问原始数据集中支持向量的位置,这是“插入符号”包和“序列”函数。不包含用于构造测试用例的代码。如果您希望关注该问题,则应重新考虑使该问题具有可复制性(使用插入符号包中的数据集或使用
dput(head(您的_数据,30)),你可以考虑在适当的时候使用你的CAP键,在不同意你的输入的时候要少一些,我已经添加了示例代码……并且尝试修改我的资本化。我已经编辑了我的答案来解决你的其他问题。出于某种原因,模型只提取了8个SV。如果我输入“SvMFIT $FAILMODEL”支持VE。类别为“ksvm”SV类型的ctor机器对象:C-svc(分类)参数:成本C=1高斯径向基核函数。超参数:sigma=0.72640759446315支持向量数:9目标函数值:-5.6994训练错误:0.083333如果可能,请回答我的问题。我已在“此行下的新问题”行下添加了我的问题在我最初的问题中,谢谢…我厌倦了这些命令…它们返回数据点的alpha/权重吗?我又找到了一个命令alphaindex(svmFit$finalModel)…我猜这会返回作为支持向量的数据点的位置,对吗?你是正确的-alphaindex返回用作支持向量的数据点的位置,coef返回有符号的权重,其中sv属于第一组的符号为正,sv属于第二组的符号为负。还有一件事svmFit$finalModel command output表示“SV类型:C-svc(分类)参数:成本C=1”。这是否意味着任何支持向量的最大权重都是1?我在我们的数据上进行了测试,没有发现任何权重大于1,但希望得到您的同意。。
svmFit$finalModel
svmFit <- train(class ~ .,
    data = trainset,
    method = "svmRadial",
    preProc = c("center", "scale"),
    tuneGrid = svmTuneGrid,
    trControl = trainControl(method = "repeatedcv", repeats = 5, 
classProbs =  TRUE))

predictedClasses <- predict(svmFit, testset )
predictedProbs <- predict(svmFit, newdata = testset , type = "prob")
print(predictedProbs)
    Bad      Good
1 0.2302979 0.7697021
2 0.7135050 0.2864950
3 0.2230889 0.7769111