在考虑权重信息的同时训练基于 SVM 的分类器

机器算法验证 机器学习 分类 支持向量机 内核技巧
2022-04-06 23:31:08

目前我有一个已知属于两个类的数据集,并且想使用 SVM 构建一个分类器。但是,该数据集存在不同的置信水平。例如,对于某些数据点,我们非常确定它们属于第 1 类;而对于某些数据点,我们认为它们应该属于 1 类,但不是那么确定。我们可以将这种置信度信息量化为权重。但是我们如何才能将这些权重信息投入到训练过程中呢?LibSVM 是否支持这种类型的训练?

4个回答

你所问的并不真正属于 SVM 的框架。有一些关于将先验知识整合到 SVM 中的工作(参见例如这里,但这些方法通常不是基于示例的基础。

如果你有很多样本,我可以想到一种方法来解决这个问题。您可以将权重用作包含在随机子集中的概率。然后,您将在每个子集上学习 SVM,然后您的最终分类器是这些子集的线性组合。这是自举的一种变体,它通常适用于特征的子集(参见例如这里,并且分析起来可能非常有趣。

[编辑1]:

根据 Jeff 和 Dikran 的回答,我想到您可以将其合并到 SVM 目标中。通常原始形式如下所示:

minw,ξ,b{12w2+Ci=1nξi}

受制于(对于任何i=1,n)

yi(wxib)1ξi,    ξi0.

但您可以只包含另一个置信度值向量,例如0<δi1,    i=1,n

minw,ξ,b{12w2+Cδii=1nξi}

受制于(对于任何i=1,n)

yi(wxib)1ξi,    ξi0.

这意味着概率低的实例将在目标中受到更大的惩罚。请注意,现在C参数执行两个角色 - 作为正则化器和作为置信度分数的比例因子。这可能会导致它自己的问题,所以最好将它分成两部分,但是当然你会有一个额外的超参数来调整。

[编辑 2]:

可以通过libSVM (包括 MATLAB 和 Python 接口)来完成。SMO 算法也有多种语言的代码,可以有效地解决 SVM 问题。或者,您可以使用优化包(例如matlabCVX中的 quadprog )来编写自定义求解器。

可能感兴趣的一篇论文是Lawrence 和 Scholkopf的“Estimating a Kernel Fisher Discriminant in the Presence of Label Noise”,它处理的是 KFD 而不是 SVM,但是这两个分类器密切相关,并且对于大多数问题都会给出相似的结果。请注意,KFD 等效于核岭回归,2 范数 SVM 等效于仅在支持向量上计算的 KRR,因此可以将此方法移植到 SVM。

一般来说,当你有一个完全概率分类器时,处理标签噪声是最容易的,所以正如 tdc 所建议的那样,SVM 可能不是最好的方法。可能值得研究 SVM 的半监督版本,因为问题是相似的,在这两种情况下,您只有关于某些标签的不确定信息(对于半监督方法非常不确定)。tdc 建议的方法可能值得尝试,或者将每个模式呈现两次,每次使用不同的标签,并带有权重p1p.

有一种称为加权 SVM 的技术(请参见下面的参考文献),它似乎受到 LibSVM 的支持(我从未实际使用过)。加权 SVM 解决了两个类的训练数据不相等的问题。在这种情况下,分类偏向于具有更多观察值的类。作为补偿,W-SVM 设置惩罚参数 C 与类的大小成比例。

通过为每个观察值赋予自己的 C,可以将相同的想法应用于置信度信息;虽然我不确定 LibSVM 是否支持这一点。从这个意义上说,你对你有很大信心的观察给予更大的惩罚,而对你几乎没有信心的观察给予小惩罚。最终结果是,超平面是根据您的需要通过置信区间对每个观测值进行加权来确定的。

黄和杜 (2005)。加权支持向量机,用于训练类大小不均匀的分类。过程。第四诠释。会议。关于机器学习和控制论,4365-4369。取自http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1527706

试试这个包:https ://CRAN.R-project.org/package=WeightSVM

它使用“libsvm”的修改版本,并且能够处理实例权重。您可以为某些科目分配较低的权重。