Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R对象不是矩阵_R_Matrix_Machine Learning_Svm_Libsvm - Fatal编程技术网

R对象不是矩阵

R对象不是矩阵,r,matrix,machine-learning,svm,libsvm,R,Matrix,Machine Learning,Svm,Libsvm,我是R新手,试图将我的svm模型保存在R中,并且已经阅读了文档,但仍然不明白哪里出了问题 我得到的错误是“对象不是矩阵”,这似乎意味着我的数据不是矩阵,但它是。。。所以有些东西不见了 我的数据定义为: data = read.table("data.csv") trainSet = as.data.frame(data[,1:(ncol(data)-1)]) 最后一行是我的标签 我试图将我的模型定义为: svm.model <- svm(type ~ ., data=trainSet,

我是R新手,试图将我的svm模型保存在R中,并且已经阅读了文档,但仍然不明白哪里出了问题

我得到的错误是“对象不是矩阵”,这似乎意味着我的数据不是矩阵,但它是。。。所以有些东西不见了

我的数据定义为:

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)

这里,trainSet是一个数据帧,但在svm.model函数中,它期望数据是一个矩阵(在这里您将trainSet分配给数据)。因此,设置数据=as.matrix(列车集)。这应该很好。

事实上,正如@user5196900所指出的,您需要一个矩阵来运行
svm()
。但是,请注意,矩阵对象意味着所有列都具有相同的数据类型、所有数字或所有分类/因子。如果您的数据
as.matrix()


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

如果没有可复制的例子,很难说。
svm
函数(来自哪个包?)是否希望“data”参数是矩阵?如果是这样,那就是你的问题
read.table
将数据作为data.frame对象导入,后者是更高级别的构造。尝试
data=as.matrix(列车组)
@jdobres这是e1071包中的数据。我添加了我当前的代码。我的数据集非常大,但我给出了一个示例行。我的数据集实际上每个示例都有大约3000个特性,因此我在这里进行了简化。使用
model.matrix()
或更类似于
sparse.model.matrix()
(因为您的数据量更大)时,您是否遇到了错误。使用
sparse.model.matrix()
之前的
svm()
时的一个技巧是标准化代码中的数据。这是有意义的,但在model.frame.default(formula=type~,data=list)(V1=c(21.933418,:object不是矩阵)中也不起作用
# 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