2016-04-28 13 views
1

Ich versuche, den Rekonstruktionsfehler eines Wörterbuch lernen zu berechnen.Fehler Berechnung in slearn Wörterbuch lernen

Wenn ich diesen Fehler hier nach der Formel neu berechne, erhalte ich andere Ergebnisse als die Ausgaben von sklearn.

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

Von dem, was ich in sklearn des Code verstehen konnte, kann es etwas mit der Wahl der transform_algorithm zu tun, aber ich verstehe nicht, was genau.

Hier ist ein Code-Snippet, das das Problem veranschaulicht.

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

Wenn alpha auf 0 gesetzt wird, ist mein Fehler Berechnung korrekt, so nehme ich an, dass ich Residuen die richtige Art und Weise bin zu berechnen. Also ist das Problem mit dem zweiten Begriff des Fehlers, der Alpha beinhaltet.

Vielen Dank im Voraus

Nicofarr

+0

Das Beispiel auf gist ist minimal (eine Beobachtung als Eingabe), reicht aber aus, um das Problem zu zeigen. Der Unterschied scheint größer zu werden, wenn die Anzahl der Beobachtungen erhöht wird. – nicofarr

Antwort

0

Nico, nach Ihrem Code berechnen Sie den Fehler die besten spärlich fit, dh „Reste“ können Sie die gleiche Formel wie in der Zielfunktion minimieren + zu finden“ Alpha * Strafe ". Die Strafe wird hinzugefügt, um Sparsity in der Lösung zu erzwingen, aber es sollte nicht verwendet werden, um den Fehler zu berechnen. Der Fehler, den Sie suchen, wird durch die Residuen gegeben. Haben Sie überprüft, dass die optimalen Parameter (u und v) in Ihrem Code und in sklearn identisch sind?

+0

Danke Yury. Tatsächlich enthält der Fehler, der von sklearn gegeben wird, die Strafe; siehe hier: https://github.com/scikit-learn/scikit-learn/blob/51a765a/sklearn/decomposition/dict_learning.py#L527. Ich hole den Fehler von ihrer letzten Iteration. – nicofarr

+0

Es mag albern sein, aber sie scheinen Alpha in ihrem Code um 1/n_components zu skalieren. Wenn Sie alpha in Ihrem Code durch alpha/n_comp ersetzen, wird es übereinstimmen? – Yury