【问题标题】:Multiple SVM model in RR中的多个SVM模型
【发布时间】:2013-01-08 23:02:19
【问题描述】:

我需要一些帮助来管理 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 函数时,我对数据函数调用和数据参数究竟需要做什么感到困惑。

问候

【问题讨论】:

  • 如果您可以用 R 附带的虚拟数据集替换您的真实数据集,那么我们可以更好地复制该问题。
  • e1071 没有名为 ksvm 的函数。你的意思是svm 还是你自己的功能之一?

标签: r svm statistics


【解决方案1】:

正如斯科特所提到的,您的示例不可重现(并且问题并没有说明您的问题是什么)。我重写了您的代码,以减少混乱。它未经测试,因此您可能需要对其进行调整。

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(或 plyr 中的 llply),而不是使用 for 循环,因为这涉及额外的样板代码和创建虚拟变量。请注意您不再需要vectoryvectorz

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

【讨论】:

    猜你喜欢
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2010-12-26
    • 2015-01-09
    • 1970-01-01
    • 2017-04-18
    • 2017-10-26
    相关资源
    最近更新 更多