2016-04-28 23 views
1

辞書学習の再構成エラーを再計算しようとしています。sklearn辞書学習のエラー計算

ここでの公式に従ってこのエラーを再計算すると、sklearnが出力するものとは異なる結果になります。私はsklearnのコードで理解できるものから

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

、それはtransform_algorithmの選択とは何かを持っているかもしれないが、私は正確に何を理解していません。

問題を説明するコードスニペットを示します。

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

0にアルファを設定し、私の誤差計算は正しいですので、私は、私は残差に正しい方法を計算していていることを前提としています。したがって、問題はエラーの第2項にあります。これにはアルファが関係します。事前に

おかげ

Nicofarr

+0

gistの例は最小です(入力として1つの観測値)が、問題を示すには十分です。観察の数を増やすと、その差は大きくなるようです。 – nicofarr

答えて

0

ニコは、あなたのコードに応じて、あなたは最高のまばらなフィットを見つけるために最小化する目的関数と同じ式を使用して誤差を計算、すなわち「残差」+」アルファ*ペナルティ "。ペナルティは、ソリューション内のスパース性を強化するために追加されますが、エラーの計算には使用しないでください。あなたが探しているエラーは残差によって与えられます。最適なパラメータ(uとv)がコードとsklearnで同じであることを確認しましたか?

+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に置き換えた場合、それは一致するでしょうか? – Yury