Matlab提供命令fitcsvm来训练一个svm。在其中,您可以传递一个名为Cost的键值对,它为每个类指定SVM的自定义未命中分类惩罚。由于我使用的是旧版本的matlab,我需要使用svmtrain。但是,我找不到这个函数的键值对。我有什么方法可以这样做吗?
答案 0 :(得分:1)
C-SVM的成本参数也称为" boxconstraint"。请在this index中查看其使用详情。
每个类具有不同成本参数的C-SVM称为2C-SVM。重要的是要知道这种策略最适合处理不平衡的binany数据集,其中一个类中的样本数远远高于另一个。这种2C-SVM技术中的一对错误分类成本也可以降低平衡数据集上的误报(或假阴性)比例,但优化这些参数通常成本很高。如果你有时间,请看一下名为"偏移"的技术。使用此技术,您可以使用单个成本参数训练C-SVM模型,然后增加(或减少)偏差(b)参数以控制误报(或假阴性)的比率。它比2C-SVM快得多,并且可以得到可比较的结果。
答案 1 :(得分:0)
如果您想要比假阴性更准确地对假阳性进行分类,我认为您可以将C
作为向量传递。请阅读this和this,了解C
在SVM中的作用。我引用第二个链接:
"然而,在任何正则化方案中,至关重要的是,为惩罚因子C选择适当的值。如果它太大,我们对不可分的点有很高的惩罚,我们可能存储许多支持向量和过度拟合。如果它太小,我们可能会不合适。" Alpaydin(2004),第224页。
因此,对于误报,您可以传递大C
的误差和C
的微小值。您必须处理许多其他因素,例如,过度拟合和表现不佳。通常,为C
设置较大的值可以在列车上获得良好的性能,但由于过度拟合而在测试集上会恶化。 C
的(非常)微小值可以忽略约束并产生次优分类结果,即您可以使用不同的{{1}值获得显着更高的性能}。为避免这种情况,您可以进行交叉验证。我从未尝试过这个。