在 R (libsvm) 中读入 SVM 文件

机器算法验证 支持向量机 矩阵 数据集
2022-03-15 18:30:52

来自http://www.csie.ntu.edu.tw/~cjlin/libsvm/的数据文件是 'svm' 格式。我正在尝试将其读入 R 中的稀疏矩阵表示。是否有一种简单/有效的方法来做到这一点?

这是我现在正在做的事情:逐行读取文件(800,000 行),每行单独的类、值和列。将类存储为列表,将特征存储为 .csr 稀疏矩阵(1 行),然后将特征行与之前的所有行进行 rbind。

这是非常低效的,基本上不会完成(1000 行需要 12 分钟)。我认为一旦行数开始变大,它就来自 rbinding 稀疏矩阵。

注意:矩阵 (800000*48000) 太大而无法构建然后转换为稀疏格式。

谢谢!

2个回答

该包有一种方法可以函数e1071中导出为 libsvm “svm” 格式但据我所知,没有功能。write.svmread.svm

我找到了一种至少现在可行的方法。

我使用 Matrix 包而不是 sparseM 包来构建稀疏矩阵。将条目和列存储在单独的列表中,然后通过以下方式构建矩阵:

data=sparseMatrix(i=rep(1,length[[1]]),j=columns[[loop]],
    x=entires[[loop]],dims=c(120000,47235))
for(loop in 2:120000){
  if(loop %% 1000==0){
      print(loop)
      print(Sys.time())
  }
  data[loop,columns[[loop]]]=entries[[loop]]  
}

这仍然需要一段时间(大约 2 小时),但至少它有效。

我将相应的类存储在另一个列表中,而不是在稀疏矩阵中。