2

My Problem wird, wie unten definiert,Wie wähle ich das Paket, um diese konvexe Optimierung in Python zu lösen?

minΣ (|| || xi-Xci^2 + λ || || ci),

cii st = 0,

wo X ist eine Matrix der Form d * n und C hat die Form n * n, xi und ci bedeutet eine Spalte von X und C getrennt.

X ist hier bekannt und basiert auf X wollen wir C finden

ich jetzt mehrere Möglichkeiten habe, ich habe bereits die Version in tensorflow, die die AdamOptimizer verwendet. Ich frage mich nur, gibt es eine Möglichkeit, dass ich dieses Problem effizienter lösen kann? Würde cvxpy oder cvxopt dieses Problem besser lösen?

Ich würde sehr geschätzt werden, wenn jemand von Ihnen mir eine Implementierung auf einer dieser Methoden außer Tensorflow geben könnte.

+1

wäre toll, Latex zu verwenden, um Ihre Gleichungen neu zu schreiben, um sie lesbarer zu machen, damit mehr Leute Ihr Problem untersuchen werden. –

Antwort

1

Die objektive Funktion, ich denke, bezieht sich auf Wörterbuch lernen (z. B. Ihre X) und sparse Codierung (Ihre ci), für die es mehrere gute Bibliotheken in Python gibt.

Werfen Sie einen Blick auf scikit-learn's sparse coding und Wörterbuch lernen. Alternativ können Sie SPAMS zur Optimierung verwenden.

Sie kennen Ihr Wörterbuch bereits, also müssen Sie nur die spärlichen Codes wissen. Ich denke, mit scikit-learns spärlichen Codern wäre der einfachste Weg zu gehen.

Wenn Sie mehr Macht über den Optimierungsprozess haben möchten, können Sie es in Theano (oder Keras, Lasagne, TensorFlow) selbst wie in this implementieren.

+1

Gute Analyse! Es gibt auch einen Wikis-Artikel über [Sparse-Approximation] (https://en.wikipedia.org/wiki/Sparse_approximation), in dem mögliche Algorithmen erwähnt werden, von denen einige bereits in scikit-learn implementiert sind. Der Lasso-Ansatz sollte ein guter Ausgangspunkt sein, wenn das OP allgemeine konvexe Optimierungsmethoden in cvxpy verwenden möchte. – sascha