为什么 matlab 中的 libsvm 给出了所有 1 个预测

Why `libsvm` in matlab gives me all 1 prediction

我在 R 中使用 svm,在 matlab 中使用相同的 dataset

我的 R 代码工作正常,这给了我一些合理的预测。

matdat <- readMat(con = "data.mat")
svm.model <- svm(x = matdat$normalize.X, y = matdat$Yt)
pred <- predict(svm.model, newdata = matdat$normalize.X)
pred <- sapply(pred, function(x){ifelse(x > 0, 1, -1)})
sum(pred == matdat$Yt)/length(matdat$Yt)

但是,我的 matlab 代码给出了对训练数据的所有 1 个预测。

load('data.mat')
model2 = svmtrain(Yt, normalize_X,'-s 3 -c 1 -t 2 -p 0.1');
[predicted_label,accuracy, decision_values] = svmpredict(Yt, normalize_X, model2);

我检查了svm{e1071}的默认参数,我认为与matlab版本一致。

我在 R 中使用版本为 1.6-7 的 e1071 包。以及来自官方页面的最新 libsvm

那么,我该怎么做才能找到原因,有什么想法吗?

====更新====

在将数据输入数据中的 libsvm 之前,我应用 mapstd 对 R 中自动完成的数据进行归一化。然后我在 R 和 Matlab 中得到了相同的训练模型。

在 Matlab 中,您使用 -s 3 选项,它是回归,而不是分类。 作为起点,不要假设任何默认参数,只需在 R 和 Matlab 中明确指定参数。