[英]changing the bias parameter b in scikit SVM after training, before prediction
我正在使用sklearn.svm.SVC
來解決分類問題。 在對我的數據進行訓練后,我想通過多個值循環偏差(即常用符號(wx + b)SVM 方程中的術語 b),以生成 ROC 曲線。 (我已經執行了交叉驗證並選擇了我的超參數,所以這是用於測試)。
我嘗試使用.intercept_
屬性,但這不會改變我從.predict()
得到的結果......是否有其他方法可以改變偏差項?
我可以潛在地恢復支持向量,然后實現我自己的.predict()
函數,並改變偏差,但這似乎是一種相當嚴厲的方法。
2 年前我遇到了同樣的問題。 不幸的是,唯一的解決方案是自己完成。 實現“預測”非常簡單,它是 Python 中的單行代碼。 不幸的是 .intercept_ 實際上是內部使用的截取副本(libsvm 之一)。 相當令人困惑的是,對於來自同一個庫的 LinearSVC 來說,這是不正確的,您實際上可以改變偏差(但是,顯然無法訪問內核)。
顯然,您不必像自己計算內核值那樣深入。 您仍然可以訪問“decision_function”,它最終內部存在偏差。 簡單地從決策函數中去除舊的偏差,添加新的偏差,然后取符號。 這將是(取決於偏見的跡象):
def new_predict(clf, new_bias, X):
return np.sign(clf.decision_function(X) + clf.intercept_ - new_bias)
為什么clf.decision_function(X)+ clf.intercept_ - new_bias而不是clf.decision_function(X) - clf.intercept_ + new_bias。
f(z)=符號(w * z + b),不是嗎?
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.