我是R新手,试图在R中保存我的svm模型并阅读了文档,但仍然不明白是什么错误。R对象不是矩阵
我得到错误“对象不是矩阵”这似乎意味着我的数据不是矩阵,但它是...所以缺少一些东西。
我的数据被定义为:
data = read.table("data.csv")
trainSet = as.data.frame(data[,1:(ncol(data)-1)])
当最后一行是我的标签
我想确定我的模型为:
这似乎是它应该是正确,但我无法找到其他示例。
这里是到目前为止我的代码:
# 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
很难说没有一个可重复的例子。 'svm'函数(来自哪个包?)期望“data”参数是一个矩阵?如果是这样,那就是你的问题。 'read.table'将数据作为data.frame对象导入,这是更高级的构造。试试'data = as.matrix(trainSet)'。 – jdobres
@jdobres这是来自e1071包。我添加了当前的代码。我的数据集非常大,但我给出了一个示例行。我的数据集实际上每个样本都有大约3000个特征,所以我在这里简化了。 – badner
当你使用'model.matrix()'或更像'sparse.model.matrix()'时(因为你的数据量较大),你会得到错误。在svm()之前使用'sparse.model.matrix()'的时候,一个提示是将代码中的数据标准化。 – abhiieor