如何使用 R 考虑 SVM 中不同类型错误的不同成本

How to consider different costs for different types of errors in SVM using R

设 Y 为二进制变量。

如果我们使用逻辑回归进行建模,那么我们可以使用 cv.glm 进行交叉验证,我们可以在 cost 参数中指定成本函数。通过指定成本函数,我们可以将不同的单位成本分配给不同类型的 errors:predicted Yes|reference is No or predicted No|reference is Yes.

我想知道我是否可以在 SVM 中实现相同的目标。换句话说,有没有办法让我指定成本(损失)函数而不是使用内置损失函数?

SVM 超平面参数的损失函数是自动调整的,这要归功于该算法的良好理论基础。 SVM 应用交叉验证来调整超参数。比如说,使用 RBF 内核,交叉验证是 select C(成本)和伽马(内核参数)的最佳组合以获得最佳性能,通过某些指标(例如,均方误差)衡量。在 e1071 中,性能可以通过使用 tune 方法获得,其中可以指定超参数的范围以及交叉验证的属性(即,5、10 或更多倍交叉验证)。

要通过使用曲线下面积类型的误差测量来获得比较交叉验证结果,可以训练具有不同超参数配置的不同模型,然后针对预标记数据集验证模型。

希望回答对您有所帮助。

除了Yueguoguo的Answer之外,还有标准Wrapper approach、hyperplane tuning和e1017中的三个方案。

Wrapper 方法(例如在 weka 中开箱即用)适用于几乎所有 classifier。这个想法是根据 misclassification 成本对数据进行过采样或欠采样。如果经过训练以优化准确性,则学习的模型在成本下是最优的。

第二个想法在文本挖掘中经常使用。 classification 是 svm 是从到超平面的距离导出的。对于线性可分问题,此距离对于支持向量是 {1,-1}。 class新例子的化基本上就是距离是正还是负。然而,人们也可以改变这个距离而不是做出决定和 0,而是将它移动到例如 0.8。这样一来,class化验会在一个或另一个方向上移动,而数据的一般形状不会改变。

最后,一些机器学习工具包具有针对 class 特定成本的内置参数,例如 e1017 实施中的 class.weights。该名称是由于术语 cost 是 pre-occupied.