我在svm
和R
使用matlab
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)
。
我的R代码工作正常,这给了我一些合理的预测。
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);
但是,我的matlab代码给了我关于训练数据的所有1个预测。
svm{e1071}
我检查了e1071
的默认参数,我认为这与matlab版本一致。
我在R中使用libsvm
包和版本1.6-7以及官方页面中的最新版mapstd
。
那么,我该怎么做才能找到原因,任何想法?
====更新====
在将数据提供给数据中的libsvm之前,我应用{{1}}来规范化在R中自动完成的数据。然后我在R和Matlab中获得了相同的训练模型。
答案 0 :(得分:1)
在Matlab中,您使用的是-s 3
选项,它是回归,而不是分类。
作为起点,不要假设有关默认参数的任何内容,只需在R和Matlab中明确指定参数。