LIBSVM如何执行多变量回归是我的一个普遍性问题?具体来说,我有一些关于特定数量链接的数据。(例如3个链接)。每个链接有3个依赖变量,这些变量在模型中使用时会产生输出Y。我在某些时间间隔内收集了这些链接的数据。
LinkId | var1 | var2 | var3 | var4(OUTPUT) 1 | 10 | 12.1 | 2.2 | 3 2 | 11 | 11.2 | 2.3 | 3.1 3 | 12 | 12.4 | 4.1 | 1 1 | 13 | 11.8 | 2.2 | 4 2 | 14 | 12.7 | 2.3 | 2 3 | 15 | 10.7 | 4.1 | 6 1 | 16 | 8.6 | 2.2 | 6.6 2 | 17 | 14.2 | 2.3 | 4 3 | 18 | 9.8 | 4.1 | 5
我需要进行预测以找到以下输出的结果:
(2,19,10.2,2.3).
如何使用上述数据在MATLAB中使用LIBSVM进行训练?我可以将所有数据作为输入传递给svmtrain来创建模型,还是需要分别训练每个链接并使用创建的模型进行预测?这有什么区别吗?注意:请注意每个链接的相同ID具有相同的值。
回答:
这实际上不是一个关于matlab
或libsvm
的问题,而是一个关于svm
的通用问题。
LIBSVM如何执行多变量回归是我的一个普遍性问题?
LibSVM只是一个库,特别是它实现了用于回归任务的支持向量回归模型。简而言之,在线性情况下,SVR试图找到一个超平面,使得你的数据点位于其周围的某个范围内(这与经典SVM试图以尽可能大的范围分离数据的双重方法相当)。
在非线性情况下,使用核技巧(与SVM中相同的方式),因此它仍然在寻找一个超平面,但在由特定核诱导的特征空间中,这在输入空间中导致非线性回归。
关于SVR的很好的介绍可以在这里找到:http://alex.smola.org/papers/2003/SmoSch03b.pdf
如何使用上述数据在MATLAB中使用LIBSVM进行训练?我可以将所有数据作为输入传递给svmtrain来创建模型,还是需要分别训练每个链接并使用创建的模型进行预测?这有什么区别吗?注意:请注意每个链接的相同ID具有相同的值。
你可以使用所有数据来训练SVR
(因为这是一个回归问题),但是:
- 看起来
var3
和LinkId
是相同的变量(1->2.2, 2->2.3, 3->4.1
),如果是这样,你应该删除LinkId
列, var1
的值是唯一的递增整数吗?如果是,这些可能也是无用的特征(因为它们似乎不携带任何信息,似乎是你的id
编号),- 在应用SVM之前,你应该预处理你的数据,例如,每列包含
[0,1]
区间的值,否则某些特征可能因为它们的规模而变得比其他特征更重要。
现在,如果你想为每个链接创建一个单独的模型,并遵循上述建议,你最终会得到1
个输入变量(var2
)和1
个输出变量var4
,所以我不建议这样做。总的来说,你似乎有非常有限的特征集,收集更多信息量的特征将是有价值的。