首页 文章

R对象不是矩阵

提问于
浏览
2

我是R的新手并试图在R中保存我的svm模型并阅读文档但仍然不明白有什么问题 .

我得到错误“对象不是一个矩阵”这似乎意味着我的数据不是一个矩阵,但它是......所以缺少一些东西 .

我的数据定义为:

data = read.table("data.csv")
trainSet = as.data.frame(data[,1:(ncol(data)-1)])

最后一行是我的标签

我试图将我的模型定义为:

svm.model <- svm(type ~ ., data=trainSet, type='C-classification', kernel='polynomial',scale=FALSE)

这似乎应该是正确的,但我找不到其他的例子 .

到目前为止,这是我的代码:

# load libraries
require(e1071)
require(pracma)
require(kernlab)
options(warn=-1)

# load dataset
SVMtimes = 1
KERNEL="polynomial"
DEGREE = 2
data = read.table("head.csv")
results10foldAll=c()

# Cross Fold for training and validation datasets
for(timesRun in 1:SVMtimes) {
    cat("Running SVM = ",timesRun," result = ")

    trainSet = as.data.frame(data[,1:(ncol(data)-1)])
    trainClasses = as.factor(data[,ncol(data)])
    model = svm(trainSet, trainClasses, type="C-classification", 
                kernel = KERNEL, degree = DEGREE, coef0=1, cost=1, 
                cachesize = 10000, cross = 10)
    accAll = model$accuracies
    cat(mean(accAll), "/", sd(accAll),"\n")

    results10foldAll = rbind(results10foldAll, c(mean(accAll),sd(accAll)))
 }


# create model

svm.model <- svm(type ~ ., data = trainSet, type='C-classification', kernel='polynomial',scale=FALSE)

我的一个样本的例子是:

10.135338 7.214543 5.758917 6.361316 0.000000 18.455875 14.082668  31

2 回答

  • 1

    这里, trainSet 是一个数据框,但在 svm.model 函数中,它期望 data 是一个矩阵(您将数据分配给 trainSet ) . 因此,设置 data = as.matrix(trainSet) . 这应该工作正常 .

  • 3

    确实如@ user5196900指出的那样,您需要一个矩阵来运行 svm() . 但请注意,矩阵对象意味着所有列都具有相同的数据类型,所有数字或所有分类/因子 . 如果您的数据属实, as.matrix() 可能没问题 .

    在实践中,人们通常希望 model.matrix()sparse.model.matrix() (来自包 Matrix )为分类变量提供虚拟列,同时为数字变量提供单列 . 但确实是一个矩阵 .

相关问题