【发布时间】:2015-07-06 03:59:28
【问题描述】:
我试图重现第 10 页的 libsvm“支持向量分类的实用指南”中显示的示例。我使用的数据“train.2”可以在此处下载“http://www.csie.ntu.edu.tw/~cjlin/papers/guide/data/”。
为了解析数据,测试分类准确率,我写了如下代码:
library(e1071)
rm(list=ls(all=T))
root <- "C:/Users/administrator/Documents/RProjects/libsvm"
bioDataFile <- sprintf("%s/data/train.2", root)
bioData <- read.delim(bioDataFile, header=F, sep=" ", stringsAsFactors=F)
bioData <- bioData[, c(-2,-3,-ncol(bioData))]
bioData <- lapply(1:nrow(bioData), function(n){
reformData <- bioData[n,-1,drop=F]
reformData <- sapply(1:ncol(reformData), function(m){
as.numeric(unlist(strsplit(reformData[,m], ":"))[2])
})
data.frame(Type=factor(bioData[n,1]), t(reformData))
})
bioData <- do.call("rbind", bioData)
然后我进行了测试:
bioData.model <- svm(Type~., data=bioData, cross=5)
但是,我发现: 1.我无法得到与手册中相同的结果; 2. 我发现每次运行命令时,k-fold 交叉验证准确率(mean(bioData.model$accuracies) 或 bioData.model$tot.accuracy)都不一样。
我使用 libsvm 包中提供的 svm-train.exe 进行了相同的测试,它确实产生了与手册中所示相同的结果,并且无论我运行多少次测试,它总是给我相同的结果k-fold 交叉验证准确率。
谁能告诉我为什么?任何帮助将不胜感激。
【问题讨论】:
-
为了获得结果的可重复性,您需要在运行交叉验证之前设置随机种子。
标签: r libsvm cross-validation