5

我目前正在處理一個問題,即必須解決L2規則邏輯迴歸或L2-reg線性SVM問題,其中我已添加仿射術語。在線性SVM /邏輯迴歸目標函數中添加仿射項

所以我舉例來說問題是:

min_ w {C*sum_i max(1-w*x_i*y_i,0) + 0.5*||w||^2_2 + w * v } 

其中v是一個常數向量。

當然這是一個凸起的問題,可以用通常的方法解決,但是我必須解決很多這種類型的大問題,所以我非常希望使用標準庫,如liblinear

我的問題是,是否有一種方法來轉換數據x,標籤y或稱重因子C(可能爲每個實例不同的C_i),這樣這個問題將等同於標準的鉸鏈 - 缺失SVM還是邏輯迴歸問題?

回答

5

我想不出一種方法將它變成可以通過類似liblinear的東西來處理的東西。但是,您可以使用通用切割平面優化庫之一輕鬆解決此優化問題。你所要做的就是編寫代碼來計算子梯度的一個元素(在你的情況下,它只是w + v - 和),以及目標的值。然後一個切割平面例程可以找到最優的w。

Shogun有一個CPA優化器,還有一個在dlib。我沒有使用Shogun的版本,但是我在dlib中使用了很多問題(我也是dlib的作者)。

0

如果您的現成培訓算法允許您偏差每個數據點的鉸鏈損失或邏輯迴歸,那麼這是可能的。就是這樣。

完成對最後兩項方:

0.5 ||w||^2 + w'v 
= 0.5 ||w+v/2||^2 - v'v/2 

然後引入變量

u = w+v/2 

您優化的變化則相當於

min_u C*sum_i max(1-(u-v/2)*x_i*y_i,0) + 0.5*||u||^2_2 

,它與b_i = 1 + v'x_i * y_i/2,相當於

min_u C*sum_i max(b_i - u*x_i*y_i ,0) + 0.5*||u||^2_2 

因此,如果您的訓練算法讓您用每個數據點的b_i替換1,它可以解決此問題。

幾乎每個包裝都會以某種方式適應b_i。例如,上面的是相當於

min_u C*sum_i b_i max(1 - u*x_i*y_i/b_i ,0) + 0.5*||u||^2_2 

(假設b_i> 0)因此,如果您的包還允許不同加權的每個點,可以解決上述問題。