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

「拡張」なので元の話も

前回の記事で「x=2以外では非線形」と申し上げましたが、この式でx=2とすると、ゼロにすべき一階微分は

1階偏微分の式(x=2)

こうなります。「〇〇ik」とは「行列〇〇のik成分」という意味です。またニュートン法に用いる「2階微分」は

2階偏微分の式(x=2)


こうなります。つまりi, jによらず同じスモールヤコビ行列となります。これよりニュートン法のループ式は、i及びjを「横に」並べることで

ニュートン法ループ(x=2)

このように、もとの最小二乗法と等しくなりますニュートン法はいわば「非線形をむりやり線形化して解く」手法なので、もともと線形の方程式に適用するとそのとおり、もとの線形の解が出てくるのです。

なお、x=2の場合は「ループ」ではなく「ワンショット」で計算が終わります。ヘタなプログラムを書くと1回でいいはずなのに謎の計算が続行されるのでご注意ください。

「絶対値」は面倒?

さて、冒頭では「絶対値」の効果を無視しましたが、最後にそれを考えます。最小化すべき対象は

偏差の絶対値のx乗和

このように、「偏差の絶対値のx乗和」です。一般に絶対値を含む関数は微分したときに複雑になりがちですが、今回はそこまで複雑にはなりません。

ちょっと真面目に計算すればわかりますが、「1階微分」は

1階偏微分の式(絶対値)

このようになります。偏差の正負による場合分けが加わるだけです。x-1乗の中身の正負によってマイナスがつきます。でもそれだけなので、プログラムを書くのは極めて簡単です。

数学的には絶対値の「中身がゼロ」のときは特異点なのですが、現実のプログラムではゼロ(つまり近似が元データにぴったり一致)は滅多に起こらず、起こったとしても例外処理としてゼロを出力すれば特に問題はありません。

そしてニュートン法ループで用いる「2階微分」は

2階偏微分の式(絶対値)


こうなります。絶対値関数は、中身が負のとき微分するたびにマイナスが現れるので2階微分ではそれが打ち消しあってプラスになります。

というわけで、以上の議論によってもとの「交互最小二乗法」が交互最小x乗法」に拡張されました。理論的にはx=1を除くすべての実数に対して計算が可能ですが、実態としてちゃんと計算できるのは1.5<x<4ぐらいな気がしてます。

xを1.0に近づけていくと偏差の「ペナルティ」が尖っていき(ちょっとズレただけで大きなペナルティが課され)、計算が非常に不安定になります。またxを大きくしすぎると今度は偏差の「ペナルティ」が寝ていき(ズレてもあまりペナルティが課されなくなり)、やっぱり計算が不安定になります。

この「ズレたときのペナルティを何乗にするのか」(そもそも◯◯乗、でいいのか)はけっこう深い話ですとりあえず今回は「式を拡張した」で満足しておきます。

さて、やってみて思いましたが、やっぱり2乗が一番簡単です。式の形も簡単で、計算もべらぼうに速いです。(2乗のときだけ「ループ」でなく「ワンショット」でしたね)

世の中で「最小二乗法」はよく聞くけどそれ以外は聞かない、というのは計算が大変だから、が最大の理由です。ただ場合によっては
2乗以外の「ペナルティ」がふさわしい場合もありますので、そこは臨機応変に、ですね。
ではまた!



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

【文責 べじぱみゅ】