R对象不是矩阵
R object is not a matrix
我是 R 的新手,试图在 R 中保存我的 svm 模型并阅读了文档,但仍然不明白哪里出了问题。
我收到错误 "object is not a matrix",这似乎意味着我的数据不是矩阵,但它是...所以缺少一些东西。
我的数据定义为:
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
此处,trainSet 是一个数据框,但在 svm.model 函数中它期望 data 成为一个矩阵(您将 trainSet 分配给数据)。因此,设置 data = as.matrix(trainSet)。这应该可以正常工作。
确实如@user5196900 所指出的那样,您需要一个 运行 到 svm()
的矩阵。但是请注意,矩阵对象意味着所有列都具有相同的数据类型,全是数字或全是 categorical/factors。如果您的数据是这样,as.matrix()
可能没问题。
在实践中,人们通常希望 model.matrix()
或 sparse.model.matrix()
(来自包 Matrix
),它为分类变量提供虚拟列,而为数值变量提供单列。但确实是一个矩阵。
我是 R 的新手,试图在 R 中保存我的 svm 模型并阅读了文档,但仍然不明白哪里出了问题。
我收到错误 "object is not a matrix",这似乎意味着我的数据不是矩阵,但它是...所以缺少一些东西。
我的数据定义为:
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
此处,trainSet 是一个数据框,但在 svm.model 函数中它期望 data 成为一个矩阵(您将 trainSet 分配给数据)。因此,设置 data = as.matrix(trainSet)。这应该可以正常工作。
确实如@user5196900 所指出的那样,您需要一个 运行 到 svm()
的矩阵。但是请注意,矩阵对象意味着所有列都具有相同的数据类型,全是数字或全是 categorical/factors。如果您的数据是这样,as.matrix()
可能没问题。
在实践中,人们通常希望 model.matrix()
或 sparse.model.matrix()
(来自包 Matrix
),它为分类变量提供虚拟列,而为数值变量提供单列。但确实是一个矩阵。