R中的多个SVM模型

时间:2013-01-25 01:49:08

标签: r svm statistics

我需要一些帮助来管理R中的几个SVM模型。我有大约100个数据文件,我想读取每个文件,然后使用e1071包训练该文件的模型。所有文件的名称都包含在一个文件中,因此更容易跟踪每个文件。我使用了以下代码但无法达到解决方案。

x<-read.table("data.dat", header=F)
x=as.vector(t(x))
vectory <- vector(mode="list", length=length(x))
vectorz <- vector(mode="list", length=length(x))

for (i in 1:length(x))
{
x[i] <- substr(x[i], 3, 100)
#assign(gsub("-", "_", x[i]), read.table(x[i], header=T, #sep=","))
val <- gsub("-", "_", x[i])
vectory[[val]] <- read.table(x[i], header=T, sep=",")
data(vectory[[val]])
valmodel <- x[i]
paste(valmodel, "_model", sep="")
vectorz[[valmodel]] <- ksvm(label ~ ., data=vectory[[val]])
}

我对调用ksvm函数时数据函数调用和数据参数到底需要做什么感到困惑。

此致

1 个答案:

答案 0 :(得分:0)

正如斯科特所说,你的例子是不可复制的(而且这个问题并没有说清楚你的问题是什么)。我重写了你的代码,以免混淆。它未经测试,因此您可能需要进行调整。

file_names <- read.table("data.dat")[[1]]
file_names <- substring(file_names, 3)
file_names <- gsub("-", "_", file_names)
training_data <- lapply(
  file_names,
  read.table,
  header = TRUE,
  sep    = ", "
)
svm_models <- lapply(
  training_data,
  function(data)
  {
    ksvm(label ~ ., data = data)
  }
)

一般原则:

有意义地命名变量。调用文件名file_names,而不是x

如果要循环列表(或向量),请使用lapply(或来自llply的{​​{1}}),而不是使用plyr循环,因为这涉及额外的样板代码和创建虚拟变量。请注意您不再需要forvectory

将用于读取数据的代码与运行模型的代码分开。它们是不同的任务,将代码混杂在一起会混淆你的想法。 (此外,当一个模型失败时,您不希望再次读取数据。)