首页 文章

用于高召回率的最佳SVM参数

提问于
浏览
3

我正在使用 scikit-learn 来使用SVM执行分类 . 我正在执行二进制分类任务 .

0 :不属于A类
1 :属于A级

现在,我想优化参数,以便获得高回忆率 . 我并不关心一些误报,但是属于A类的物品不应该被标记为经常不属于A.

我使用带线性内核的SVM .

from sklearn import svm
clf = svm.SVC(kernel='linear')
clf.fit(X,Y)
clf.predict(...)

我该如何选择其他SVM参数,如 C ?另外, SVC 与线性内核和 LinearSVC 有什么区别?

3 回答

  • 0

    一般来说,您可以通过在学习过程中以不同方式惩罚两种类型的错误来解决此问题 . 如果你看一下损失函数,特别是在原始/参数设置中,你可以考虑通过α(α - α)来缩放假阴性的惩罚和假阳性的惩罚,其中α在[ 0 1] . (类似的效果是复制训练集中的正实例数,但这会使您的问题不必要地变大,应该避免效率)

  • 1

    您可以通过交叉验证选择SVM参数C,这基本上是您的惩罚项 . 在这里,您可以使用K-Fold交叉验证 . 您还可以使用名为gridsearchCV的sklearn类,您可以在其中传递模型,然后使用cv参数对其执行交叉验证 .

    根据linearSVC文档 - 类似于SVC,参数kernel ='linear',但是以liblinear而不是libsvm的形式实现,因此它在惩罚和损失函数的选择方面具有更大的灵活性,并且应该更好地扩展到大量样本 .

  • 0

    内核的选择实际上取决于数据,因此根据数据图选择内核可能是最佳选择 . 这可以通过运行所有内核类型并选择能够提供高/低召回或偏差的内容类型来实现自动化,无论您正在寻找什么 . 你可以自己看the visual difference of the kernels .

    根据内核的不同,SVC构造函数的不同参数很重要,但一般来说C可能是最有影响力的,因为它是错误的惩罚 . Decreasing C会增加召回率 .

    除此之外,还有更多方法可以更好地适应,例如通过向传递给svm.fit(X,y)的X矩阵的n_features添加更多功能 .

    当然,它总是有用plot the precision/recall to get a better feel of what the parameters are doing .

相关问题