質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Q&A

解決済

1回答

859閲覧

最適化,cvx,最小二乗法,正則化付き

kakikukekonbu

総合スコア19

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

0グッド

0クリップ

投稿2020/03/23 05:12

前提・実現したいこと

以下の式をcvxを用いて実装したいと思っています.
以下の実装で解けますでしょうか,

イメージ説明

ソースコード

cvx_begin variables ω minimize(sum_square(XA-ω*XB)+lambda*norm(ω)); cvx_end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

次のようにすれば解けるはずです。

matlab

1n1=size(XA,1); 2n2=size(XB,1); 3 4cvx_begin 5variables w(n1,n2) 6minimize(sum(sum((XA-w*XB).^2))+lambda*norm(w,1)); 7cvx_end 8

投稿2020/03/23 14:58

WathMorks

総合スコア1582

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kakikukekonbu

2020/03/24 04:23 編集

ありがとうございます. やってみます. これで,上式を最小化するωが求まるのですね
kakikukekonbu

2020/03/26 06:19

以下のエラーが返されました. MTIMES (*) は 1 つのスパース引数および 1 つの single の引数に対してサポートされていません。
WathMorks

2020/03/26 07:43

XA=full(double(XA));などとすればよいでしょう。
kakikukekonbu

2020/03/27 04:22

その場合,次元が一致しなくなりませんか?
WathMorks

2020/03/29 12:39

実際に計算してみてどうなりましたか?
kakikukekonbu

2020/03/30 04:17

連結する行列の次元が一致しませんとでました. XA:27×106 double XB:60×106 single
WathMorks

2020/03/30 14:05

XA=full(double(XA));「などと」すればよいでしょう。 XBがsingleのままです。
kakikukekonbu

2020/03/31 06:12

XBもdouble型に変更したのですが,同様のエラーが返されました.
WathMorks

2020/04/01 13:02

以下をコピペして計算してみてください。 こちらの環境では(full, doubleなどしなくても)問題なく計算できました。 XA=rand(27,106); XB=rand(60,106); n1=size(XA,1); n2=size(XB,1); lambda=1; cvx_begin variables w(n1,n2) minimize(sum(sum((XA-w*XB).^2))+lambda*norm(w,1)); cvx_end
kakikukekonbu

2020/04/02 05:38

デバッグで止めてみたら,cvxによる最小二乗法の解wは27×60 singleで算出されました. その後,続行したら, エラー: * (line 186) MTIMES (*) は 1 つのスパース引数および 1 つの single の引数に対してサポートされていません。 エラー: A>B(line 418) minimize(sum(sum((XA-T*XB).^2))+lambda*norm(w,1)); が出たのですが,cvxの解算出とは関係のないところになるのでしょうか.
WathMorks

2020/04/02 15:17

>デバッグで止めてみたら,cvxによる最小二乗法の解wは27×60 singleで算出されました. コメントに記載したコード「だけ」実行してみてください。 それできちんと結果が得られていれば、上のコードとは別のところに問題があるということです。
kakikukekonbu

2020/04/03 04:14

わかりました! ありがとうございます.
kakikukekonbu

2020/04/20 06:18

作成しているコードを実行したところ,エラーが出ることはなくなりました. 27×60 cvx という形で算出されるのですが cvxという型はどういったものなのでしょうか, (データの中には解の値は入っていませんでした.)
WathMorks

2020/04/20 06:22

lambdaに値を設定しましたか?
kakikukekonbu

2020/04/21 07:21

lambda=0.0100で設定しています.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問