数理モデルで回帰分析を極める:基礎から実装まで徹底解説
My Mathematical Regression
My Mathematical Regression
数理的な回帰分析の世界へようこそ。データから予測モデルを導き出し、統計的な洞察を得るための基本的なアプローチについて考察していきます。
記事にある解法(2nからnを選ぶ)についての直感的な動機付けを説明するね。n*nのグリッドでは、合計で2n歩進む必要があって、そのうちn歩が「右(over)」、n歩が「下(down)」になる。重要なのはそのステップの順序だけ。だから2n個の「スロット」があると考えると、その中から「右」に進むn個のスロットを選べば、残りは必然的に「下」に進むことになる。だからまさに「2nからnを選ぶ」ということになるんだ。
組み合わせの公式を使わずに、n個の要素のn!通りの順列という事実だけから考えることもできるよ。これは2n個のアイテムの順列と考えられて、それぞれn個の同じアイテムからなる2つのグループがあるものとして扱える。単純に(2n!)としてしまうと、「右」のステップ同士は区別がつかないし、「下」のグループも同様なので重複して数えてしまうことになる。「右」グループの並び替えの分だけn!通り、「下」グループも同じ分だけn!通りの重複があるから、それを割ってあげることで正しい答えが出る。つまり (2n!) / (n! * n!) となり、これはまさに「2nからnを選ぶ」ことと等しくなる。重複順列についての一般的な解説は[1]を見てみて。[補足: 結果的に組み合わせの公式を再導出したようなものだね!]
[1] https://brilliant.org/wiki/permutations-with-repetition/ (https://brilliant.org/wiki/permutations-with-repetition/)
正直言って、学生のような推論はまだ危険だよ……パターンがいつも綺麗に一般化できるとは限らないからね。モーザーの円分割問題(Moser's circle problem)を調べてみるといい。
これを「右と下の移動の組み合わせ」として捉えることの正当化が必要なんだ。他のコメントで指摘されているようにね。
悲しいことの一つだと思うんだけど、「この一見複雑な問題は、この公式を当てはめるだけで解ける」と気づくような人って、多くの企業環境では正当に評価されるのに苦労することが多いんだ。
以前、そんな人をマネジメントしたことがあるよ。彼は非常に複雑な思考ができる人だったけど、複雑なことを愛していたわけじゃなくて、シンプルさを愛していたんだ。「これら全部の要素は無視してXだけに集中すれば、すべての価値が得られる」という形の解決策をよく出していた。彼が何かに気づいて単純化すると、会社にもたらされる利益は彼の給料の何倍にもなったよ。
彼を直属の部下に持ったことのあるマネージャーは皆、彼がどれほどの宝物だったかを知っていた。でも、彼の解決策があまりにシンプルなので、他の人にその価値を納得させるのは難しかったんだ。みんな「難しい問題には複雑な解決策があるはずだ」と思い込んでいたからね。(そうじゃなかったら、とっくに誰かが解いてるはずだろ?って感じで)
彼は結局退屈してしまい、退職して神学校に入ったよ。
AIを使うことを誰かに強制されているわけじゃないんだし。
AIは脳にとってのジャンクフードみたいになってるね。誘惑や広告がどこにでもあるんだ。
2nからnを選ぶという解法への飛躍には、少し飛躍した理屈が含まれている気がする。まあそれはいいんだけど、元数学教師の脳としては、「パターンに従うから」という3つの観察に基づく推論よりも、ちゃんとした証明か、少なくとも堅実な論理が欲しいところだね。
でも、24年前の婚約中に義父が言っていた問題を思い出したよ。大きなロールに巻かれたサンドペーパーの量が、代金に見合っているかを確認する方法についての相談だった。ロールを特定の厚さを持つ単純な同心円として扱い、そこからガウスの和の公式に2πを掛けて長さを求めるという簡単な問題に置き換えることができたんだ。会社のエンジニアたちも同じ結論に達したけど、彼らは n(n-1)/2 を使う代わりに、Excelで複数の行を使ってひたすら足し算をして計算してたよ。
あのProject Eulerの問題は、私が初めてメモ化(memoization)に触れたきっかけだったな。当時は魔法のような解決策に感じたから、パスカルの三角形の中央の列を使って解いたんだ。その頃の自分にはそっちの方が理解しやすかったから。
popcountを使った奇抜なアイデアも試したけど、スケールしなかった。それぞれの経路を0(ターンしない)と1(ターンする)で表現して、同じ数の0と1を持つものをテストする方法だったんだけど。ハードウェアサポートでpopcountがO(1)で動くとしても、可能な経路の総数が多すぎて実用的じゃなかったよ :)
これはAIが登場する前からある現象だよ。高校時代にやったことでもよく見かけるけど、たいてい複雑な問題に関してだね。何が起きているかというと、当時は紙とペンを使って難しい問題に取り組んでいたんだ。大人になった今は答えを知っていて当然だと思いがちだけど、実際には14歳の頃と比べてそんなに賢くなっているわけじゃない。だから、ちゃんと正攻法で取り組む必要があるんだよ。
あと、小さな子供の宿題を手伝ってみるとわかるけど、10歳向けの問題でも実際にしっかり考えないといけない難しいものがあるよね。
大学の離散数学の講義でこの問題を教えたよ。教える時の直感的な説明としては、20個の「R(右)」と20個の「D(下)」の文字列を並び替える方法の数と完全に等価であるという考え方だね。
こうした問題を直感的に解くコツは、心の中で「この文字列の順列は何通りあるか?」という問題に書き換えることだね。2 * 3の場合を考えてみよう。
...
...
ここに至る一つのルートはこうだよね。
右, 右, 右, 下, 下
これをこう書き換えることができる。
RRRDD
常にRが3つとDが2つ必要になる。じゃあ、これでいくつのユニークな文字列が作れるか?
退化的なケースから考えてみよう。
ABCDE
Aが入る場所が5つ、次にBが入る場所が4つ、Cが3つ…と続いて、ABCDEの順列は5! = 120通りになる。もしBをAに置き換えると
AACDE
今度は順列が60通りになる。なぜなら元の120通りのうち半分は、AとBの相対的な位置が違うだけだったからだ。同じ論理で、
AACCE
は30通り、そして
AACCC
は10通りになる。(なぜ20じゃなくて10なのかを理解するのが個人的には一番の難所だと思う。CDEを並べる方法は3!通りあるけど、CCCを並べる方法は1通りしかないからなんだ)
AACCCはRRDDDと同型で、これが2*3のグリッドのパスが10通りになる理由だ。これは二項定理を使って ((2+3) choose 3) = 10 として確認できる。
このステップバイステップのアプローチがいいのは、正方形じゃないグリッドだけでなく、多次元にも一般化できる点だ!例えば3x3x3のルービックキューブの頂点から対角の底まで行く方法を考えてみて。どうやって計算する?「AAABBBCCC」を並び替える方法は何通りあるか?という問題に置き換えればいい。上の論理だと 9! / (3! 3! 3!) = 1,680通りのユニークなパスがあるはず。退化的なケースから始めて、どう切り分けるかを考えれば導き出せるよ!
2nからnを選ぶという解法は全然直感的じゃないけど、40ステップあって、そのうち20歩が右、20歩が下、と考えれば話は別だ。この40ステップの全順列を (40!) / ((20!)^2) と考えると、それはすごく直感的だね。20は40の半分だから k と n - k が同じ数(20)になって、二項係数 n! / k!(n - k)! と一致するのは当たり前だってことがわかる。でもこれは2次元における幸運な一致のような気がするし、問題を3次元に拡張するなら順列で考えたほうがうまくいくだろうね。