【问题标题】:Prediction using SVM Regression?使用 SVM 回归进行预测?
【发布时间】:2017-11-20 16:15:48
【问题描述】:

我想使用支持向量机 (SVM) 进行预测。我已经使用matlab函数fitrsvmpredict编写了如下代码,

tb = table(x,y)                                                  
Mdl = fitrsvm(tb,'y','KernelFunction','gaussian')                                                                          
YFit = predict(Mdl,tb);                                
scatter(x,y);                                                   
hold on                                                
plot(x,YFit,'r.')

我得到的输出 .
这里蓝色是测试值(tb),红色是使用 SVM 的预测。正如你可以清楚地看到这个预测是错误的。谁能告诉我有什么方法可以改进接近测量值的预测?

【问题讨论】:

  • 默认情况下,fitrsvm 使用线性核函数,生成线性回归模型。您应该specify your kernel function 执行非线性拟合。请注意,回归拟合可能更适合您的情况。
  • 如何以这种给定的格式添加内核函数。我试过并给了我错误。有什么想法吗?
  • 我要添加它的高斯内核
  • 我做到了,但预测仍然不正确,请看看您是否有任何改进的想法?
  • 我刚做了。请看一下

标签: matlab machine-learning svm


【解决方案1】:

您应该使用 RBF 或 gaussian 等内核函数。

SVM的默认Kernel是K(xi, xj) = xi*xj,是一个线性核。当然只能得到线性回归的结果。

类似代码

x = 0:0.01:5 ;
y = sin(x)+rand(1, length(x)) ;
x = x' ;
y = y' ;
tb = table(x,y) ;
Mdl = fitrsvm(tb,'y','KernelFunction','gaussian');
YFit = predict(Mdl,tb);                                
scatter(x,y);                                                   
hold on                                                
plot(x,YFit,'r.')

================================================ =========================
至于结果的准确性,它取决于许多因素,如内核类型、惩罚系数调整或其他因素,通常需要多次调整参数。交叉验证可以帮助您找到一组好的参数

【讨论】:

  • 谢谢。我做了同样的事情并得到了如问题所示的输出。但我仍然觉得距离测试值不太近。你能建议我做些什么来改善我的预测吗?我听说过 BoxConstraint KernelScale,Epsilon 可以帮助改进我的预测,但不知道如何在这个问题中使用它
  • 我认为提高准确率的最简单方法是进行交叉验证以找到具有最佳测试准确度的最佳训练集。至于规模或惩罚系数等,它也工作但需要调整,这是一项肮脏的工作。
  • 谢谢。你能告诉我一些关于如何使用交叉验证来为此目的找到最佳训练集的例子吗?
  • @AnkitaDebnath 如果你有足够的训练样本,你可以将它们随机分成K个折叠,一个(可能两个或一些你喜欢但不要太大)作为测试集,剩下的一个作为训练集。用训练集来训练你的模型,用测试集来测试你的模型最准确。这通常很耗时。
  • matlab 函数中有什么例子吗?有这么多。与许多功能混淆。你能找到一个可以做到这一点的例子吗?
猜你喜欢
  • 2014-05-10
  • 1970-01-01
  • 2015-07-11
  • 2014-09-16
  • 1970-01-01
  • 2020-01-08
  • 2017-11-08
  • 2015-06-19
  • 2018-05-29
相关资源
最近更新 更多