2014-07-10 54 views
4

我應該在VW中使用哪些參數來執行二進制分類任務?例如,我們使用rcv1_small.dat。 I thought最好使用邏輯損失函數(或鉸鏈),並且使用--oaa 2是沒有意義的。然而,實證結果(在所有4個實驗報道漸進驗證0/1虧損)表明最好的組合是--oaa 2沒有邏輯的損失(即默認平方損失):Vowpal中的--oaa 2和--loss_function = logistic的影響Wabbit

cd vowpal_wabbit/test/train-sets 

cat rcv1_small.dat | vw --binary 
# average loss = 0.0861 

cat rcv1_small.dat | vw --binary --loss_function=logistic 
# average loss = 0.0909 

cat rcv1_small.dat | sed 's/^-1/2/' | vw --oaa 2 
# average loss = 0.0857 

cat rcv1_small.dat | sed 's/^-1/2/' | vw --oaa 2 --loss_function=logistic 
# average loss = 0.0934 

我的主要問題是:爲什麼--oaa 2沒有給出與--binary(在上述設置中)完全相同的結果?

我的第二個問題是:爲什麼優化邏輯損失不會改善0/1損失(與優化默認平方損失相比)?這是特定的數據集嗎?

回答

2

我在使用--csoaa時遇到過類似的情況。細節可以找到here。我的猜測是,如果N類的多類問題(無論您將2指定爲多個類),vw實際上可以處理N個功能副本。同樣的例子在預測/學習每個可能的類時獲得不同的ft_offset值,並且該偏移量用於散列算法。所以所有的類都從同一個數據集的行中獲得「獨立」的一組特徵。當然,特徵值相同,但vw不保留值 - 僅限特徵權重。每個可能的課程的權重都不相同。並且由於用於存儲這些權重的RAM數量固定爲-b(默認爲-b 18) - 越多的類您有更多的機會獲得散列衝突。您可以嘗試增加-b值,並檢查--oaa 2--binary結果之間的差異是否在減小。但是我可能會錯,因爲我沒有深入研究vw代碼。

至於損失函數 - 您不能直接比較平方(默認)和邏輯損失函數的平均損失值。您將從平方損失獲得的結果中獲得原始預測值,並根據邏輯損失獲得這些預測的損失。該功能將是:log(1 + exp(-label * prediction)其中標籤是一個先驗已知的答案。以vw實現的所有損失函數的這些函數(float getLoss(float prediction, float label))可以在loss_functions.cc中找到。或者你也可以初步縮放原預測值[0..1]與上kaggle.com描述1.f/(1.f + exp(- prediction)然後計算日誌丟失:

double val = 1.f/(1.f + exp(- prediction); // y = f(x) -> [0, 1] 
if (val < 1e-15) val = 1e-15; 
if (val > (1.0 - 1e-15)) val = 1.0 - 1e-15; 
float xx = (label < 0)?0:1; // label {-1,1} -> {0,1} 
double loss = xx*log(val) + (1.0 - xx) * log(1.0 - val); 
loss *= -1; 

您還可以擴展到與[0..1]原預測「/ vowpal_wabbit/utl/logistic'腳本或--link=logistic參數。兩者都使用1/(1+exp(-i))

+0

謝謝,你對我的主要問題的答案似乎是正確的。在上面的例子中加上'-b 28'得到平方= 0.0856,logistic = 0.0909,oaa_squared = 0.0855,oaa_logistic = 0.0909。有趣的是,隨着哈希碰撞(默認-b 18),oaa(具有兩倍的特徵)有時(平方)更好,有時(邏輯)更糟。 –

+0

至於我的第二個問題,我沒有比較平方與邏輯損失值。所有報告的值都是0/1損失。對於二元分類,這是'--binary'的效果(順便說一下:它對最終的模型/權重沒有影響)。對於oaa,報告0/1損失(即,1減去準確性)是默認的(不能改變,例如對於多分類 - 邏輯損失)。所以我認爲我的第二個問題仍然沒有答案。 –

+0

對不起,我沒有注意到你比2比差損失函數的原始預測損失了0/1。我目前正在使用修改後的vw來源,其中0 - 1損失在'--oaa'中被替換爲當前kaggle競爭所需的平均對數損失。我可以在下週嘗試使用原始資料。 – truf

相關問題