我有一个数据框trainData
,其中包含198行,看起来像
Matchup Win HomeID AwayID A_TWPCT A_WST6 A_SEED B_TWPCT B_WST6 B_SEED
1 2010_1115_1457 1 1115 1457 0.531 5 16 0.567 4 16
2 2010_1124_1358 1 1124 1358 0.774 5 3 0.75 5 14
...
testData
类似。
为了使用SVM,我必须将响应变量Win
更改为factor
。我尝试了下面的内容:
trainDataSVM <- data.frame(Win=as.factor(trainData$Win), A_WST6=trainData$A_WST6, A_SEED=trainData$A_SEED, B_WST6=trainData$B_WST6, B_SEED= trainData$B_SEED,
Matchup=trainData$Matchup, HomeID=trainData$HomeID, AwayID=trainData$AwayID)
然后我想要一个SVM并预测概率,所以我尝试了下面的
svmfit =svm (Win ~ A_WST6 + A_SEED + B_WST6 + B_SEED , data = trainDataSVM , kernel ="linear", cost =10,scale =FALSE )
#use CV with a range of cost values
set.seed (1)
tune.out = tune(svm, Win ~ A_WST6 + A_SEED + B_WST6 + B_SEED, data=trainDataSVM , kernel ="linear",ranges =list (cost=c(0.001 , 0.01 , 0.1, 1 ,5 ,10 ,100) ))
bestmod =tune.out$best.model
testDataSVM <- data.frame(Win=as.factor(testData$Win), A_WST6=testData$A_WST6, A_SEED=testData$A_SEED, B_WST6=testData$B_WST6, B_SEED= testData$B_SEED,
Matchup=testData$Matchup, HomeID=testData$HomeID, AwayID=testData$AwayID)
predictions_SVM <- predict(bestmod, testDataSVM, type = "response")
但是,当我尝试打印predictions_SVM
时,我收到了消息
factor(0)
Levels: 0 1
而不是一列概率值。发生了什么事?
答案 0 :(得分:0)
我自己并没有这么多,但我知道SVM算法本身并不产生类概率,只产生响应函数(与超平面的距离)。如果你看一下svm函数的文档,参数&#34; probability&#34; - &#34;逻辑指示模型是否应允许概率预测&#34; - 默认情况下为FALSE,并且未将其设置为TRUE。 predict.svm的文档同样地说,论证&#34;概率&#34;是一个&#34;逻辑,指示是否应计算并返回类概率。只有在模型符合启用概率选项的情况下才有可能。&#34;希望有所帮助。