使用以下代码,我正在尝试执行留一法交叉验证。
library(e1071)
library(plyr)
trainingdata<-read.table('data.txt', sep=",", header=TRUE)
f0 <- function(x) any(x!=1) & any(x!=0) & is.numeric(x)
trainingdata<-cbind(colwise(identity, f0)(trainingdata))
C <- 0
M <- 0
count <- nrow(trainingdata)
for(i in 1:count)
{
actual <- trainingdata[i,]$label
trainingtemp <- trainingdata[-c(i), ]
model <- svm(factor(label)~., data=trainingtemp, method="C-classification",
kernel="sigmoid", C=0.1, gamma=0.01, cross=10)
testdata <- trainingdata[i, ]
prediction <- predict(model, testdata)
prediction <- paste(prediction)
if(actual==prediction)
C <- C+1
else
M <- M+1
}
write.csv(data.frame(C,M))
我不明白的问题是我总是得到相同的 C(正确分类)和 M(错误分类)值。在以下条件下结果相同:
1 - 我尝试了不同的 Cost 和 gamma 值(也尝试了 best.svm() 函数)
2 - 也尝试了不同的分类方法+不同的内核。
3 - 数据集中共有大约 50 个特征。即使在构建模型时使用了任何一个特征,即 (svm(label~x1...) 或 svm(label~x2...),结果也没有影响。
代码有问题吗?数据非常大,可以在这里发布。