在训练之后,在预测之前改变scikit SVM中的偏差参数b

时间:2016-04-11 16:39:24

标签: python machine-learning scikit-learn classification

我正在使用sklearn.svm.SVC来解决分类问题。在训练了我的数据之后,我想通过许多值来循环偏差(即通常符号(w.x + b)SVM方程中的项b),以便产生ROC曲线。 (我已经进行了交叉验证并选择了我的超参数,因此这是用于测试)。

我尝试使用.intercept_属性,但这不会改变我从.predict()获得的内容...是否有其他方法可以改变偏见项?

我可能会恢复支持向量,然后实现我自己的.predict()函数,改变偏见,但这似乎是一种相当严厉的方法。

1 个答案:

答案 0 :(得分:2)

2年前我遇到了同样的问题。不幸的是,唯一的解决方案是自己做这件事。实施"预测"很简单,它是Python中的一个单行程序。不幸的是.intercept_实际上是内部使用的拦截的副本(libsvm one)。相当令人困惑的是,对于来自同一个库的LinearSVC来说,它不是真的,你实际上可以替换偏差(但是,显然不能访​​问内核)。

显然,您不必像计算内核那样深入了解自己。您仍然可以访问" decision_function",最终内部存在偏见。只需从决策功能中删除旧偏差,添加新偏差,然后取符号。这将是(达到偏见的标志):

def new_predict(clf, new_bias, X):
  return np.sign(clf.decision_function(X) + clf.intercept_ - new_bias)