为什么 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 中明确指定参数。
我在 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 中明确指定参数。