SSブログ
最小2乗法のイメージ ブログトップ
前の10件 | -

最小2乗法 - その13 [最小2乗法のイメージ]

最小2乗法の話はきょうでおしまい。今日の最後は、キャッチーに書けば「Householder法なんていらない」という結論。

なお、今日のを含めて記事をpdfにまとめたものをここに置いておく。また、Householder法を実装して数値実験したソースをここに置いておく。ソースの方は計算効率を考えて書いた訳ではないので、Householder法によるQR分解の具体的なアルゴリズムの参考として、Objective-C(とvDSPフレームワーク)による数値計算の実装の例として、また今日この後に示した数値実験の追試のためと考えていただきたい。コードは効率よりもObjective-Cのクラスとしての見通しの良さに注意したつもり(しかしMatrixのコードなど、見通しがいいとは言えないものになってはいるけど)。

続きを読む


最小2乗法 - その12 [最小2乗法のイメージ]

いちおう数学は終わって、設計もおおまかにはできたので、実装する。今回はやはりAppleのdeveloper programに参加してはじめてのコードだし、これからも書き続けようと思うので、Cocoa/Objective-Cの新しい(ちっとも新しくない、と言われるだろうけど)機能をちゃんと使うことにしよう。

それはつまり
  • ARC(Automatic Reference Counting)
  • property
  • block
  • 無名カテゴリ(ほんとは「クラス拡張」というらしいけど、このほうが僕にはわかりやすい)
などである。無名カテゴリによるインスタンス変数の隠蔽は、Foundationフレームワークのヘッダを見ればわかるように、Appleはずいぶん前から多くを書き換えて、ほとんどのクラスでインスタンス変数が宣言されていない。なかにはpropertyの宣言も無くてメソッド名しかわからないクラスも多い。ユーザが見るヘッダはなるべくシンプルにする、という方針が貫かれていて、僕もそれにならうことにする。

一番の山はARCで、慣れの問題が大きい。ちゃんとAppleのガイドラインに従ったコーディングをしてるつもりなんだけど、特にinitの中でmalloc()したメモリをdeallocでfree()するところでクラッシュしたりする。まだよくわかっていないらしい。MRC(Manual RC)ではこういうバグはまず出さないくらい慣れてきたのに。まあ、しょうがない。

今回はじめて知ったんだけど、ARCは32ビットモードでは動かないらしい。ARCはコンパイラの機能なので32/64ビットには関係ないし、MRCとコンパイル単位レベルで互換性があるはずなんだけど、Objective-Cのランタイムが対応していないとコンパイラが言う。

改めて見直してみるとシステムのFrameworkでも昔からあるのは32/64ビットのユニバーサルバイナリだけど、例えばAVKitやMapKit、GameController、SpriteKit、EventKitなんかがすでに64ビット単一のバイナリになっている。OS Xのシェアの問題からサードパーティがマルチプラットフォームを前提にするせいで、AppleはOSの新しい機能を使ってもらいにくい状況にある。Adobeなんかの大手のソフトは32ビットモードがまだまだ残っている。なるほどなあ。強力な64ビット化圧力だなあ。でも同じことをMicrosoftがWindowsでやると非難ごうごうだろうなあ。

続きを読む


最小2乗法 - その11 [最小2乗法のイメージ]

たまたま人づてに前の会社で僕が最後にやっていたテーマが今どうなっているか聞いた。評価用サンプルを作る段階まで到達して、うまく行っているらしい。それはいいんだけど、最後に僕がやってた近似計算は結局無視されて、高価な照明系シミュレーションのソフトウェアを導入して計算しているという。

照明系の計算ソフトは光線追跡に基づいていて、一番の問題となる回折効果(SWS的な効果も含む)は別の手段を使わないと盛り込めないので、光の利用効率は悪くないという結果にしかならない、従って無駄であってだから近似的な計算を僕がやる、と言ってその計算を実行して、後のために詳細なレポートにまとめた。それが去年の暮れから年明けにかけての話だった。

僕がいなくなったあとそのソフトウェアのライセンスを買って光学的なモデルを作って計算すると、効率はまったく劣化しないという結果になって、試作することになった、試作品を測定すると計算よりは悪いと言う結果だったが、そのまま行けということになった、という。ふーん、それはよかったですねえ、と笑顔で聞いていたけど、腹の底では、まったくもって僕が言ったことを無視して、しかも僕が苦労してやった計算まで無かったことにしやがって、とムカムカした。

つまりようするに、近似ではあるが本質的な身内の計算より、結果に影響しない複雑なモデリングをして高価なソフトを使った計算のほうを信用する、ということだ。そしてこれが技術を売りにしている会社の、技術の現場で行われていることだ(これまでの僕の言動にも問題がある、という指摘は甘んじて受けよう。しかしそれはそれこれはこれだ)。おそらくそのうちこの会社では、節電のためにブレーカにシールを貼ったり、謹製のマイナスイオン応用製品が出たりするんだろう。

まあ、今さらどうなろうが僕の知ったことではないけど、なんだかおも〜い無力感を感じた。それでは好きなだけ無駄な金と時間と工数を費やして無意味な結果を出せばいい。ほんとに僕の知ったこっちゃない。

....さて、(はぁ。ため息が出てしまった)気を取り直して最小2乗法の実装。

続きを読む


最小2乗法 - その10 [最小2乗法のイメージ]

地道に続ける。前回でHouseholder変換を使って最小2乗法の正規方程式を、数値的安定性を壊さずに解く方法をまとめた。今回は縦に長い行列(もちろんqueueじゃなくてmatrixの話)による一次方程式から出発して最小2乗解を得る、という話。僕はこれが面白いと思うんだけど、ほかの人はどうだろう....

続きを読む


最小2乗法 - その9 [最小2乗法のイメージ]

どうでもいいけどサーボモータやギヤボックスや配線があらわになった亜里栖に、かえってエロスを感じるというのはどういうことだろう。

すっかり忘れていた。新しい会社でいっぱいコードを書かなければいけなくなって、必要になった計算をgslの中から探していた。FFTや最小2乗法なんかが欲しいんだけど、そういえばなんか書いてなかったっけ?自分で書いた昔のコードをあさっていたら、どっちも自分で書いたのが出てきた。デバグはすんでObjective-Cのインターフェイスになっている。ちっとも知らなかった。

いやいや、それって自分で自分のために書いたもので、忘れてるだけ。もう他人が書いたコードと区別がつかないけど、読み返してみると結構いろんなところで親切じゃん、と思った。そりゃそうだわ。だって自分が使いやすいように書いたんだもの。

そういえば最小2乗法の話も、もうちょっとだけ残っていることを改めて知った。これは一番最近で、でも4ヶ月もあいだがあいてしまうと、何やってたのかきれいさっぱり。自分の鋭い忘却力に驚いたけど、せっかくなので思い出すことにした。

ということで気を取り直して、途中でぷっつり切れていた記事の続きを書くことにした。最小2乗法についてのこれまでの記事を読み返して、なるほどこういう方向に話を持っていきたかったのね、では後は僕が引き受けましょう.....

前回はHouseholder変換という、ちょうどベクトルを鏡にうつしたような変換を考えた。Householder変換は任意の二つのベクトルの内積の値を変えない、という性質があるのでQR変換に使える。前回はHouseholder変換を使って行列の第1列の第1要素以外を0にする方法までをおさらいしてあった。今回はそのあと、残りの左下半分の要素を0にする方法を考えることから続けることにする。

続きを読む


最小2乗法 - その8 [最小2乗法のイメージ]

ずいぶん間があいてしまった。前回までにGivens回転を使ったQR分解をやったので、もうあとほんの少しだけ残っている。完全に忘れないうちにやってしまおう。

追記:(2/23)
符号間違ってた。修正。

続きを読む


最小2乗法 - その7 [最小2乗法のイメージ]

しばらく間があいてしまって何をやってたのかまた例によって忘れそうになる。前回までは行列GがQR分解できたとしたら、という話だった。ここからはどうやってQR分解するか、という話に入る。

続きを読む


最小2乗法 - その6 [最小2乗法のイメージ]

MathematicaとRaspberry Piで遊んでるせいで、こっちを忘れてしまいそうになっている。まあ別に忘れても誰も何とも言わないだろうけど、一応続けることにする。

前回は最小2乗法で関数展開するときに、どう言う場合に数値解が不安定になるかというのを具体的な例で見た。単純なベキ展開では条件が悪くなることが多いけど、そういった悪条件の最小2乗法でも、とにかく数値が欲しい、と言う場合がある。そのときは無理矢理にでも数字を作らないといけないけど、逆行列に極端に大きな数字や小さな数字が出てきて、すぐ桁落ちしてしまう。そういうときどうすればいいのか。

続きを読む


最小2乗法 - その5 [最小2乗法のイメージ]

前回は最小2乗法の代数的な構造を幾何学的イメージに落としてみた。僕はこのイメージで最小2乗法がわかったような気になった。ところで、最小2乗法では条件の悪い行列に出会うことがよくある。式-14の行列Gは、測定された値にはよらず選んだ関数列が、測定点でどんな値をとるか、というだけで決まる。

どういう場合に条件が悪くなるか、簡単な例で見てみる。今日はちょっと長いけど、テレビの連続ドラマのようにひきを作る(例えば「宇宙家族ロビンソン」のように)と、僕の方が何やってたかわからなくなるので、一気に行ってみる。ここんとこはいかにも僕らしい話だと自分では思っている。

続きを読む


最小2乗法 - その4 [最小2乗法のイメージ]

せっかく行列を考えたんだからすこし違う方向から見ていることにする。式-8をもういちど考える。
1123eq25.png
これは不能の方程式だった...

続きを読む


前の10件 | - 最小2乗法のイメージ ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。