r - R中的SVM:“预测变量必须是数字或有序的。”

标签 r svm roc

我是R的新手,因此遇到了这个问题:我想比较两种将其应用于某些数据的预测技术(支持向量机和神经网络),并希望比较它们的性能。为此,我使用ROC曲线。该代码应该用于计算ROC曲线下的面积,但是它不起作用。神经网络代码工作正常,但是执行SVM部件时出现以下错误:


> aucs <-auc((dtest $ recid ==“ SI”)* 1,lr.pred)

roc.default(响应,预测变量,auc = TRUE,...)中的错误:
预测变量必须是数字或有序的。

> obj.roc <-roc((dtest $ recid ==“ SI”)* 1,lr.pred)

roc.default((dtest $ recid ==“ SI”)* 1,lr.pred)错误:
预测变量必须是数字或有序的。


这是我的代码。

library(stats)
library(pROC)
library(nnet)
library(e1071)
library(rpart)

data <- read.table("data.csv", header=T)

set.seed(1234)
ind    <- sample(2, nrow(data), replace=TRUE, prob=c(0.8, 0.2))
dtrain <- data[ind==1,]
dtest  <- data[ind==2,]

# Variables for storing comparison results #
bestAuc = 0
bestIdx = 0

# Support Vector Machines
lr.fit  <- svm(recid~., data=dtrain, cost=1000, gamma=1, probability=TRUE)
lr.pred <- predict(lr.fit, dtest, type="response")
aucs    <- auc((dtest$recid=="SI")*1, lr.pred)
obj.roc <- roc((dtest$recid=="SI")*1, lr.pred)

print("SVN (default)")
bestAuc = aucs # Initialize


# Neural networks
lr.fit  <- nnet(recid~., data=dtrain, size=4, maxit=500, decay=1, trace=FALSE)
lr.pred <- predict(lr.fit, dtest, type="raw")
aucs    <- auc((dtest$recid=="SI")*1, lr.pred)
obj.roc <- roc((dtest$recid=="SI")*1,  lr.pred )

if(aucs > bestAuc) {
  bestAuc <- aucs
  bestIdx <- 1
  print("Neural networks")
}


我一直在寻找信息,但似乎我使用的方法很少。我看到了一个名为ROCR的软件包,我认为这可能很有用,但我还会遇到性能函数错误。我对所有这些库都有些迷路,因此我尝试坚持最初的解决方案,而没有进行任何改进。我该怎么办?


编辑:

该解决方案基于Calimo的想法。预测的返回值未提供所需格式的数据,因此需要使用以下格式:

lr.pred <- attr(lr.pred,"probabilities")[,c("SI")]


该句子将在ROC曲线中获得要分析的列。

最佳答案

如错误消息所述,您需要在lr.pred中使用数字矢量或有序因子。这里的问题是,预测(对于svm)返回预测的类,从而使ROC练习几乎毫无用处。

您需要获得内部分数,例如课堂概率:

lr.pred <- predict(lr.fit, dtest, probability = TRUE)


(对于一等或二等,您必须选择获得哪种概率。还要注意,type = "response"被忽略了。)

关于r - R中的SVM:“预测变量必须是数字或有序的。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27459476/

相关文章:

html - Shiny 的 HTML 整页 Bootstrap 轮播

machine-learning - 机器学习-SVM特征融合技术

python - VotingClassifier 中的 roc_auc,scikit-learn (sklearn) 中的 RandomForestClassifier

r - 从命名列表和函数名创建可解析的字符串

r - 最大似然的 Hessian 矩阵 - Gauss vs. R

r - 如何替换数据框中的特定单词

python - 显示 SVM 中特征重要性的 Python 代码是什么?

svm - 使用 LSA/SVD 进行文档分类

python - 如何读取此 ROC 曲线并设置自定义阈值?

r - 将 pROC 包与 h2o 一起使用