我正在使用sklearn.svm.SVC
来解决分类问题。在训练了我的数据之后,我想通过许多值来循环偏差(即通常符号(w.x + b)SVM方程中的项b),以便产生ROC曲线。 (我已经进行了交叉验证并选择了我的超参数,因此这是用于测试)。
我尝试使用.intercept_
属性,但这不会改变我从.predict()
获得的内容...是否有其他方法可以改变偏见项?
我可能会恢复支持向量,然后实现我自己的.predict()
函数,改变偏见,但这似乎是一种相当严厉的方法。
答案 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)