2016-04-28 19 views
1

我正在嘗試重新計算字典學習的重建錯誤。sklearn字典學習中的錯誤計算

當根據這裏的公式重新計算這個錯誤,我得到比sklearn產出不同的結果。

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.DictionaryLearning.html

從我能在sklearn的代碼理解,它可能是與transform_algorithm的選擇,但我不明白究竟是什麼。

這裏是一個代碼段說明了這個問題。

https://gist.github.com/nicofarr/d277fb0c350849e0c3333767b8a1fb2b

當設置阿爾法爲0,我的錯誤計算是正確的,所以我認爲我計算殘差的正確方法。所以問題出在錯誤的第二項,涉及到alpha。

在此先感謝

Nicofarr

+0

關於要點的例子很少(一個觀察值作爲輸入),但足以顯示問題。增加觀測次數後,差異似乎會變大。 – nicofarr

回答

0

尼科,根據您的代碼計算使用相同的公式錯誤作爲目標函數你減少尋找最佳稀疏的契合,即「殘差」 +」阿爾法·懲罰」。懲罰被添加來強制解決方案中的稀疏性,但不應該用來計算錯誤。你正在尋找的錯誤是由殘差給出的。你有沒有檢查過你的代碼和sklearn中的最佳參數(u's和v's)是否相同?

+0

謝謝尤里。實際上,sklearn給出的錯誤包括懲罰;請參閱此處:https://github.com/scikit-learn/scikit-learn/blob/51a765a/sklearn/decomposition/dict_learning.py#L527。我從他們上次迭代獲取錯誤。 – nicofarr

+0

這可能很愚蠢,但它們似乎在其代碼中按1/n_components縮放alpha。如果你在代碼中用alpha/n_comp替換alpha,它會匹配嗎? – Yury