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

Can an SVM be trained to target a scalar value (from 0 to 100) instead of a binary?

我看过 YouTube 上有关 SVM 的教程。在每个教程中,训练数据被分成离散的组,通常是两个(例如 X 和 Y),而不是某个范围(1 到 100)之间的值。 svmtrain 的文档针对目标 Group 参数说明如下:

Grouping variable, which can be a categorical, numeric, or logical vector, a cell vector of strings, or a character matrix with each row representing a class label. Each element of Group specifies the group of the corresponding row of Training. Group should divide Training into two groups.

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

如果这可以做到,我该如何使用 svmtrain 函数呢?我是否只让 Group 向量行具有观察行对应的 1 到 100 数字?

谢谢

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

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

您也可以将您的问题视为一个简单的多class class化(其中 classic SVM 具有典型的多class 到二进制-class 分解),但是,您的 class 具有结构(因为它们有自然顺序),因此上述公式更适合。

经典的 SVM 只做二元分类。一旦您了解引擎盖下发生的事情,这应该是有道理的!每个训练观察 i 是一个 n 维向量 x_i 以及一个二进制分类 y_i = 1 或 y_i = 0。SVM 训练试图做的是通过 n 维绘制一个超平面space 将您的观察结果 x 分解为分类为 y_i=1 的一半-space 和类别 0 的一半-space。超平面将线性 [​​=19 =] 分成一半 spaces,所以经典的 SVM 只能做二进制分类。

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