是否可以训练SVM以标量值(从0到100)而不是二进制值?

时间:2015-11-08 19:50:31

标签: matlab machine-learning svm

我已经在YouTube上查看了有关SVM的教程。在每个教程中,训练数据被分成不连续的组,通常是两个(例如X&s;和Y' s),而不是某个范围(1到100)之间的值。 svmtrain的文档针对目标Group参数说明了以下内容:

  

分组变量,可以是分类,数字或逻辑   向量,字符串的单元格向量,或每行的字符矩阵   代表一个类标签。 Group的每个元素都指定了该组   相应的训练行。小组应该分开培训   分为两组。

再次说两组。我有训练数据,其中观察(行)是一个数字向量,对应于音频文件激活频率的强度。我有一个目标,每个观察是1到100之间的实数。我希望如此,如果在训练数据上测试类似的音频文件,将产生类似的目标号码。但据我了解,SVM只能告诉我新的音频文件是否与训练过的音频文件匹配或不匹配,而不是匹配的程度。我错了吗?是否可以训练SVM从矢量到1到100的标量映射,而不仅仅是二进制是否属于某个组?

如果可以这样做,我怎样才能使用svmtrain功能?我只是让Group向量行具有观察行对应的1到100数字吗?

由于

2 个答案:

答案 0 :(得分:2)

经典SVM只进行二进制分类。一旦你理解了幕后发生的事情,这应该是有意义的!每个训练观察i是n维向量x_i以及二进制分类y_i = 1或y_i = 0. SVM训练尝试做的是通过n维空间绘制超平面以将观察x吐入半空间中分类为y_i = 1,半空间分类为0.超平面将线性空间分为半空间,因此经典SVM只能进行二进制分类。

使用普通最小二乘法进行线性回归可能是最简单的尝试。您始终可以添加数据的非线性变换,以获得更多右侧变量以进行线性回归。回到SVM的东西,可能有一种方法可以将你的分类问题表示为一个多重二元分类问题,但我从来没有这样做过,所以我不知道它是多么简单/难等......就是这样。

答案 1 :(得分:1)

有两种设置或多或少符合您的问题。

  • 回归,您尝试预测实际值,并且可以使用支持向量回归(SVR)。
  • 排名问题,您只关心一个元素是否比另一个元素引起更强或更弱的反应,并且您可以使用排名支持向量机(RankSVM)。

您还可以将您的问题视为一个简单的多类分类(应用了典型的多类到二元类分解的经典SVM),但是,您的类具有结构(因为它们具有自然顺序) ,所以上述配方更适合。