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