I am Charmie

メモとログ

L2ノルムとL1ノルムの違い

CVXを使って,L1ノルムとL2ノルムの違いをみてみる.
もっと正確に言うと,L1ノルムでスパースな解が求まっているのかを確かめる.

  1. >> m=16;n=8;
  2. >> A=randn(m,n); b=randn(m,1);
    % L2 norm
    % Minimize |Ax-b|2
    % subject to |x|
    2
  3. >> cvx_begin
  4. >> variable x_l2(n);
  5. >> minimize( norm(Ax_l2-b,2)+norm(x_l2,2));
  6. >> cvx_end
    % L1 norm
    % Minimize |Ax-b|2
    subject to |x|
    1
  7. >> cvx_begin
  8. >> variable x_l1(n);
  9. >> minimize( norm(Ax_l1-b,2)+norm(x_l1,1));
  10. >> cvx_end
x_l2, x_l1に,それぞれ正則化項をL2ノルム,L1ノルムにした解が格納されているので比較.
>> [x_l2 x_l1]
ans =
-0.1598 -0.1088
-0.0488 -0.0000
0.0380 0.0000
0.1336 0.0000
0.3207 0.2636
-0.0513 -0.0000
0.3794 0.2774
-0.0616 -0.0028

という事で,L1ノルムによってスパースな解が求まっている事が分かる.