Pythonで線形制約を使用して最小二乗問題を解く


12

解決する必要があります

バツAバツb22stバツ=1バツ0

それがCVXOPTで解決できる二次問題だと思いますが、どうやって解決するかはわかりません。


この質問がcompsciにとってあまり具体的ではないことを願っています。
ティルステン

Geoff Oxberry:好奇心だけですが、なぜ線形部分を編集したのですか?私はそれが問題記述のかなり無力な部分だと思う、解は非線形最小二乗最適化のためにかなり異なるだろう。
ティルステン

ところで、他の編集は素晴らしいです!
ティルステン

非常に効率的な方法で、独自のコードでこれを簡単に解決できます。CVXOPTの必要はありません。
-Royi

回答:


11

CVXPYを発見する前に、完全な回答(行の下)を書きました。これは(MATLABのCVXのように)あなたのためにすべての難しいことを行い、ここであなたとほとんど同じ非常に短い例を持ってます 関連する行を置き換えるだけです

 p = program(minimize(norm2(A*x-b)),[equals(sum(x),1),geq(x,0)])

私の古い答え、CVXOPTでそれをより困難な方法で行う:

目的関数を二乗するGeoffの提案に従って

Aバツb22=バツTATbTAバツb=バツTATAバツbTAバツバツTAbbTb

もちろん、すべての項はスカラーであるため、3番目の項を転置し、最後の項をドロップできます(依存しないため、どのxが最小値を与えるかは変更しませんが、再度追加する必要があります)目的の正しい値を取得するために解いた後)x T A T A x b TA + A Txを得るために これは(制約を含む))二次プログラムの形式を持ち、 CVXOPTのドキュメントはこちら(このような問題を解決するためのサンプルコードもあります)。バツバツ

バツTATAバツbTA+ATバツ

4

解決した問題の代わりに、解決します

バツAバツb22stバツ=1バツ0

この問題は、CVXOPT、IPOPT、または他の任意の凸最適化ソルバーで解決できる微分可能な凸状の非線形最適化問題です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.