【问题标题】:factor(0) when using predict for SVM in R在 R 中对 SVM 使用预测时的因子(0)
【发布时间】:2015-09-22 18:00:28
【问题描述】:

我有一个数据框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

而不是一列概率值。怎么回事?

【问题讨论】:

  • 很久以后评论:我没有你的 kaggle 数据,所以我不能完全确认解决方案,但你可以看看This SO Answer。我想它可能会回答你的问题。

标签: r machine-learning svm predict


【解决方案1】:

我自己没用过这么多,但我知道SVM算法本身不会产生类概率,只会产生响应函数(与超平面的距离)。如果您查看 svm 函数的文档,参数“概率” - “逻辑指示模型是否应允许概率预测” - 默认情况下为 FALSE,并且您没有将其设置为 TRUE。 predict.svm 的文档类似地表示,参数“概率”是一个“逻辑指示是否应计算并返回类概率。只有在模型启用了概率选项时才可能。”希望对您有所帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-11-01
  • 2013-11-26
  • 2018-09-25
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
相关资源
最近更新 更多