次のコードを使用して、leave-one-out 交差検証を実行しようとしています。
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 - コストとガンマに異なる値を試してみました (best.svm() 関数も試しました)
2 - さまざまな分類方法とさまざまなカーネルも試しました。
3 - データ セットには合計約 50 の特徴があります。モデルの構築中に 1 つの機能 (svm(label~x1...) または svm(label~x2...)) が使用された場合でも、結果は影響を受けません。
コードに問題はありますか?ここに掲載するにはかなりのデータ量です。