scikit-learn分类器适合目标函数,精度和召回

时间:2015-05-01 20:32:45

标签: machine-learning scikit-learn svm

机器学习分类器的性能可以通过各种指标来衡量,例如精确度,召回率和分类准确度等。

给出这样的代码:

clf = svm.SVC(kernel='rbf')
clf.fit(X_train, y_train)
  1. 试图优化的拟合函数是什么度量标准?

  2. 如果精度比召回更重要,那么如何调整模型以提高精度?

3 个答案:

答案 0 :(得分:3)

我看到两种方法:通过网格搜索参数进行优化,如@laneok建议的那样,或者通过调整阈值来优化@cfh建议。

最理想的是你应该做到这两点。

我不会尝试仅优化精度,因为通常通过设置非常高的阈值并获得非常低的召回率来获得100%的精度。因此,如果可能的话,您可以在您喜欢的精确度和召回之间进行权衡,并对其进行网格搜索。

如果您确实选择了单独的阈值,那么您可能会获得更好的结果。您可以使用SVC.decision_function获得连续输出,然后为您想要实现的权衡选择最佳阈值。要选择阈值,您需要一个验证集,这使得在网格搜索中执行此操作有点棘手(但并非不可能)。

我通常发现在优化您想要的和管道的复杂性之间进行良好的权衡是在网格中进行优化 - 搜索需要精确考虑的内容,比如“roc_auc”,以及在网格搜索之后根据您喜欢的权衡,在验证集上选择一个阈值。

roc_auc基本上可以同时优化所有可能的阈值,因此参数不会像您想要的那样具体。

答案 1 :(得分:2)

您可以使用Grid Search Cross Validation调整SVM的参数,以最大限度地提高精确度。为此,请设置参数"评分"像

sklearn.grid_search.GridSearchCV(clf, param_grid, scoring="precision")

此处clf是您的SVC分类器,当然,您还需要设置参数网格param_grid。请参阅示例here

答案 2 :(得分:0)

有一种技术,您可以编写自己的损失函数来关注排名指标(例如,AUC,Precision-Recall),而不是分类损失(例​​如,铰链损失或对数损失)。

请参阅论文的第4节(以固定的精度最大化召回率) 不可分解目标(https://arxiv.org/pdf/1608.04802.pdf)的可扩展学习以获取更多详细信息。