簡體   English   中英

在訓練后、預測前更改 scikit SVM 中的偏差參數 b

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM