2015-05-24 83 views
1

我正在使用LIBLINEAR訓練一個簡單的邏輯迴歸分類器。只有3個功能,標籤是二進制0-1。liblinear L1與L2邏輯迴歸性能差異

樣品輸入文件:

1 1:355.55660999775586 2:-3.401379785  3:5 
1 1:252.43759050148728 2:-3.96044759307 3:9 
1 1:294.15085871437088 2:-13.1649273486 3:14 
1 1:432.10492221032933 2:-2.72636786196 3:9 
0 1:753.80863694081768 2:-12.4841741178 3:14 
1 1:376.54927850355756 2:-6.9494008935  3:7 

現在,如果我使用 「-S 6」,這是 「L1-正規化logistic迴歸」,則10倍交叉驗證的精度是70%左右,每一秒都能完成。 但是,如果我使用「-s 7」,即「L2-正則化邏輯迴歸(雙重)」,則訓練迭代超過1000,而10倍精度僅爲60%。

有沒有人看過這種奇怪的行爲?根據我的理解,L1和L2之間的唯一區別是正則化術語是使用abs(x)還是pow(x,2)。

回答

0

感謝您發佈此!我經常使用liblinear,並且一般總是在不考慮的情況下使用L2損失。這篇文章做了一個很好的解釋差異:http://www.chioka.in/differences-between-l1-and-l2-as-loss-function-and-regularization/

基於此,我猜你不僅有少量的功能,但也可能是一個小的數據集?你有沒有試圖增加輸入點的數量?

+0

感謝您的回覆!我有大約30萬個訓練實例,其中64%是正面訓練實例。你覺得這足夠嗎? – menphix

+0

順便說一句,非常有幫助的文章! – menphix

+0

快樂文章幫助! 哦,這應該是綽綽有餘,而且這個歪斜不應該大到足以讓這個差別變得更大。你是否嘗試過標準化的東西,比如正規化輸入數據?你能將誤差作爲訓練迭代的函數來繪製嗎?也許它不會收斂? – ABC

0

不認爲這是一個'奇怪'的行爲在我的不好意見。在你沒有任何意識之前,你必須做一個試驗來確認哪一個適合你的情況。理論上,L1-regular與特徵選擇一樣有界,而l2-regular更平滑。

0

我才意識到有由LIBLINEAR提供了兩個迴歸分類:

0 -- L2-regularized logistic regression (primal) 
7 -- L2-regularized logistic regression (dual) 

我用7,不銜接甚至在1000次迭代。 當我切換到0後,它收斂得非常快,能夠達到〜70%的準確度。

我認爲雙原則主要是差異的優化方法,所以我認爲這可能是一些數值計算問題。

有關雙數形式,與原始的格式更多信息: https://stats.stackexchange.com/questions/29059/logistic-regression-how-to-get-dual-function