Python 高召回率的最优支持向量机参数

Python 高召回率的最优支持向量机参数,python,machine-learning,scikit-learn,svm,Python,Machine Learning,Scikit Learn,Svm,我正在使用scikit learn使用SVM进行分类。我正在执行一项二进制分类任务 0:不属于A类 1:属于A类 现在,我想优化参数,以获得高召回率。我不太关心一些误报,但是属于类a的对象不应该被标记为不属于类a 我使用线性核的支持向量机 from sklearn import svm clf = svm.SVC(kernel='linear') clf.fit(X,Y) clf.predict(...) 我应该如何选择其他支持向量机参数,如C?另外,使用线性内核的SVC与LinearSV

我正在使用
scikit learn
使用SVM进行分类。我正在执行一项二进制分类任务

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

现在,我想优化参数,以获得高召回率。我不太关心一些误报,但是属于类a的对象不应该被标记为不属于类a

我使用线性核的支持向量机

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

我应该如何选择其他支持向量机参数,如C?另外,使用线性内核的
SVC
LinearSVC
之间有什么区别?

内核的选择实际上取决于数据,因此根据数据图选择内核可能是一种方法。这可以通过运行所有内核类型并选择一种可以提供高/低召回率或偏差的内核类型来实现自动化,不管您在寻找什么。你可以自己看

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

除此之外,还有更多方法可以获得更好的拟合,例如,通过向传递给svm.fit(X,y)的X矩阵的n_特征添加更多特征


当然,它总是有用的。

一般来说,你可以通过在学习过程中对这两类错误进行不同的惩罚来解决这个问题。如果您查看损失函数,特别是在原始/参数设置中,您可以考虑将误报的惩罚按alpha缩放,将误报的惩罚按(1-alpha)缩放,其中alpha在[0 1]中。(类似的效果是重复训练集中的正实例数,但这会使问题变得不必要的大,为了提高效率,应该避免)

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

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

@ahieule谢谢!关于主要问题有什么看法吗?在选择最佳SVC参数时,您应该进行交叉验证,例如使用
GridSearchCV
对象。scikit学习文档中有一些示例