我在YouTube上观看了关于支持向量机(SVM)的教程。在每个教程中,训练数据都被分成离散的组,通常是两个组(例如X和Y),而不是某个范围内的值(如1到100)。svmtrain函数的文档中对目标Group
参数的描述如下:
分组变量,可以是分类、数值或逻辑向量,也可以是字符串的单元向量,或每行代表一个类标签的字符矩阵。Group的每个元素指定Training对应行的组。Group应将Training分为两组。
这里再次提到两组。我的训练数据中,每个观测(行)是一个数字向量,对应于音频文件中某个频率的激活强度。我为每个观测设定了一个目标值,是1到100之间的实数。我希望当一个相似的音频文件在训练数据上测试时,能产生一个相似的目标数值。但据我所知,SVM只能告诉我新音频文件是否与训练的音频文件匹配,而不能告诉我匹配的程度。我的理解有误吗?SVM能否被训练以从一个向量映射到1到100之间的标量,而不仅仅是判断是否属于某个组?
如果可以做到,如何使用svmtrain函数来实现?我是否只需将Group
向量的行设置为观测行对应的1到100的数字?
谢谢
回答:
有两种设置或多或少与你的问题相符。
- 回归问题,你试图预测一个实值,可以使用支持向量回归(SVR)来实现这一点。
- 排序问题,你只关心一个元素是否比另一个元素引起更强或更弱的反应,可以使用排序支持向量机(RankSVM)来实现这一点。
你也可以将你的问题视为一个简单的多类分类问题(为此使用经典的SVM并应用典型的多类到二类分解),然而,你的类别是有结构的(因为它们有自然的顺序),所以上述方法更适合。