在训练后、预测前更改 scikit SVM 中的偏差参数 b

fun*_*ute 2 python classification machine-learning scikit-learn

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

我尝试使用该.intercept_属性,但这并没有改变我从中得到的结果.predict()......是否有其他方法可以改变偏差项?

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

lej*_*lot 5

两年前我也遇到过同样的问题。不幸的是,唯一的解决方案是你自己做这件事。实现“predict”非常简单,它是 Python 中的一句台词。不幸的是 .intercept_ 实际上是内部使用的拦截的副本(libsvm 的)。相当令人困惑的是,对于来自同一个库的 LinearSVC 来说,情况并非如此,您实际上可以改变偏差(但是,显然,无需访问内核)。

显然,您不必像计算内核自己所重视的那样深入。你仍然可以访问“decision_function”,它最终内部存在偏见。只需从决策函数中删除旧的偏差,添加新的偏差,然后取符号即可。这将是(取决于偏差的符号):

def new_predict(clf, new_bias, X):
  return np.sign(clf.decision_function(X) + clf.intercept_ - new_bias)
Run Code Online (Sandbox Code Playgroud)