*注意)この「べじぱみゅの学習メモ」のカテゴリー記事は、ワタクシ自身がこれまでに勉強したいろいろな項目について、テキストにあんまり書いてない内容などを勝手に妄想したメモです。
ワタクシ自身の備忘録のために書いており「初学者にわかりやすく説明する」というものではございません。
導入なしに唐突に話が始まり、おそらく意味不明な文章かもしれません。
しかし、せっかく考えたことなので、記事の内容がもし誰か1人でもお役に立てれば幸いです。

「意味」をちゃんと考える


改めて「追加縛り」の意味を考えてみると、3手法はそれぞれ「偏差の二乗和」を最小化するとともに「2乗和」「1乗和」「分散」の最小化をついでにやる、という命令になっています。例としてこれらの追加命令を課した際に、分解する行列CおよびSの成分2乗和がどうなっているか計算してみました。

行列成分の2乗和
行列成分の2乗和(合計)

グラフの左端はλ=0つまりもとの交互最小二乗法の結果です。3種の追加縛りにおいて、λを増やしていくと行列成分2乗和がどう変化するかを示してします。

*なお3手法が追加縛りに用いる
「成分2乗和」「成分1乗和」「成分の分散」は絶対値が全然違うので同じλを設定しても「偏差の2乗和に比較してどれだけ重要視するか」は変わります。そのため3種の手法に対して、同じ「λの絶対値」の効果を比較することにあまり意味はありません。あくまで「λの増加に対してどうふるまうか」が重要です。

このグラフを見ると、いずれの手法でもλを大きくする、つまり「追加縛りをより重要視する」ことにより、行列Cの成分2乗和が小さくなり逆に行列Sの成分2乗和は大きくなり、合計としては成分2乗和が小さくなる、という傾向があります。

今回のケースではもとの最小二乗法の結果において「Cの大きさ」>>「Sの大きさ」という状況だったので、「2乗和を小さくせよ」「1乗和を小さくせよ」「分散を小さくせよ」のいずれの命令でも結果として「Cの大きさを小さく、Sの大きさを大きく」という方向に行きます。今回のマッピングでは命令による差がわかりにくいですが、特に何らかの事情により「プロファイルをのっぺりさせたい」という時などは、この差が顕著に出ます。「2乗和を小さくせよ」だと、λの増加とともに本当にプロファイルの縦軸が少しずつ縮むだけなのですが、「分散を小さくせよ」だとプロファイルがどんどん平らになります。

なお「追加縛り」を重視することによって、もともとの「偏差の2乗和を最小化する」という命令は軽視される方向に行きます。

偏差2乗和

このように、λを極端に大きくするとDとCS^Tの差は大きくなります。「もとの命令」と「追加命令」の両立はできないので、どの辺を良しとするかは状況に応じて選択する必要があります。

今回のケースで追加命令の特徴が出るのは「1乗和」です。

ゼロ成分の数

これは、最終分解結果である行列C, Sのなかにゼロがいくつあるかを示しています。Cは6384x6=98304個、Sは92(元素数)x6=552個の要素なので合計98856個の数値のうち、どれだけの成分がゼロか、ということです。

赤の「分散最小化」でλ=100のときゼロが急に増えますが、これはどんどん「のっぺり」させていった結果たまたまそうなっただけで積極的に「ゼロを増やしにいった」のではありません。一方で緑の「1乗和最小化」ではλの増加とともにじわじわとゼロが増えていきます。これは能書きのところで説明しましたが、1乗和最小化のときのループ式

1乗和最小化時のMCRループ_成分

が示すように、「1乗和最小化」の追加縛りによりループの際に小さな成分が強制的にゼロにされるようになることを反映しています。λの大きさはそのまま「ゼロ化する閾値」に対応するためλを大きくしていくことでゼロが増えていくのです。

ちなみに今回のケースではλ=3.3まで計算しましたが、それ以上にしようとするとゼロが増えすぎた(半分以上がゼロ)影響か、逆行列の計算ができなくなりました。先ほど1乗和最小化の効果は「コントラストが強くなる」「ゼロ成分が増える」と述べましたが、まさにそのことを示しています。インチキスパースモデリングの成果ですね!

今回述べてきた「偏差2乗和+追加縛り」、極めて汎用性が広くさまざまなデータ解析に用いられています。追加縛りの関数を適切に選ぶことで多くの機能を実現することができます。いろいろ試してみましょう!ではまた!


はっぴぃ理系らいふ、いぇい
ヽ(・ε・)人(・ε・)ノ キミモナカマニナロウゼ
   

【文責 べじぱみゅ