【问题标题】:Why `libsvm` in matlab gives me all 1 prediction为什么matlab中的`libsvm`给了我所有1个预测
【发布时间】:2016-05-25 23:58:33
【问题描述】:

我在Rmatlab 中使用svm 和相同的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

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

==== 更新====

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

【问题讨论】:

    标签: matlab libsvm


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-01-07
      • 2014-04-11
      • 2013-02-19
      • 2014-04-23
      • 2014-02-18
      • 2016-07-23
      • 2014-06-20
      • 2013-05-18
      • 2011-08-09
      相关资源
      最近更新 更多