default eye-catch image.

n次元超球体の体積

[mathjax] 球面集中現象理解のための数学シリーズ第2弾。 前の記事でデカルト座標->極座標の変換から体積要素の積分により3次元球体の体積を導出してみました。 極座標の3変数(r,phi_1,phi_2)について定積分を計算していくと(frac{4pi r^3}{3})が出てきます! [clink url=\"https://ikuty.com/2019/08/02/concentration_on_the_sphere_1/\"] より高次元の超球体の体積がわかると、超高次元のときに体積が超球体の表面に集中する様が 論理の飛躍なく理解できるらしいので、今回は高次元の超球体の体積を導出するやつを流してみます。 (n)次元空間において以下を満たす点の集合が半径(r)の(n)次元球体です。 (x,y,z...)とやっていくとアルファベットが尽きるので(x_1,x_2,cdots,x_n)とします。 (3次元だとすると、半径が(sqrt{x_1^2+x_2^2+x_3^2}le r)の全ての点。) begin{eqnarray} x_1^2+x_2^2+cdots+x_n^2 le r^2 end{eqnarray} この集合を全部足したものが体積になります。 例えば3次元のとき、前回の記事の通り以下のようになります。ここではデカルト座標(x,y,z)。 極座標変換することで計算ができます。 begin{eqnarray} int_{x^2+y^2+z^2 lt r^2} U(x,y,z) dV &=& int_{0}^{2pi} Biggl( int_{0}^{pi} Bigl( int_{0}^{r} U(r,phi_1,phi_2)r^2 sin(phi_1) dr Bigr) d phi_1 Biggr) dphi_2 \\ &=& frac{4}{3} pi r^3 end{eqnarray} ちなみに2次元球体の体積(つまり円の面積)は当たり前ですが(pi r^2)です。 1次元球体の体積(つまり直線の長さ)は(r)です。 なんとなく(n)次元だと(r)の次数が(n)になりそうですが、 実際そうで(時間がないので公式として使ってしまいます)、 (n)次元の超球体の体積は(r^n)に比例します。 (Vr^n)のようにしておきます。 (n)次元の超球体を輪切りにすることを考えます。 球をどうやって輪切りにしても断面図は真円ですので...。 3次元の球体を輪切りにすると2次元の平面が現れる、というイメージです。 (n)次元の超球面を輪切りにし(n-1)次元の平面を作成し、 (n-1)次の平面と微小距離(Delta r)をかけて(n)次元の直方体を作ります。 微小距離(Delta r)を限りなくゼロに近づけることで体積要素とします。 体積要素は詰まるところ輪切りですが、輪切りなのに(n)次元なのです。 体積要素を全範囲で積分することで体積を求めます。 さて、(x_1^2 + x_2^2 + cdots + x_n^2 = 1)が半径1の単位球です。 これを輪切りにします。(n)次の変数を定数にします。(x_n=t)。 つまり、輪切りは(x_1^2 + x_2^2 + cdot + x_{n-1}^2 = 1-t)。 輪切りの半径は(sqrt{1-t})。(t=0)であれば丁度球体を真っ二つにする感じです。 (t=1)であれば球体のキワの限界で面積がゼロ。 (t)で輪切りにしたあと、(t)を微小距離(t+Delta t)だけ増やします。 その体積は(V_{n-1}(sqrt{(1-t)^{n-1}}) Delta t)。 (Delta t)を限りなくゼロに近づけると真の輪切りに近づき、 それを(r)の全範囲で定積分します。 begin{eqnarray} V_n=int_{-1}^{1} V_{n-1}sqrt{(1-t)^{n-1}} dt end{eqnarray} 球体は真ん中で対照なので、 begin{eqnarray} V_n =2 int_{0}^{1} V_{n-1}sqrt{(1-t)^{n-1}} dt end{eqnarray} 計算してから積分するのと、積分してから計算するのが同じなので、 begin{eqnarray} V_n=2 V_{n-1} int_{0}^{1} sqrt{(1-t)^{n-1}} dt end{eqnarray} 超絶懐かしい置換積分を使うと(int f(x) dx = int f(g(t)) frac{dx}{dt} dt)が出来る。 (t=sintheta)とすると、 begin{eqnarray} V_n= 2 V_{n-1}(int_{0}^{frac{pi}{2}} cos^{n-1}theta cos theta d theta ) end{eqnarray} これどうやって積分するんだよ...、と呆然としてしまうけれども、 公式があるようです。時間がないので公式を使います! 階乗が2つ並んでいるのは1つ飛ばしで階乗をする2重階乗というらしい。 begin{eqnarray} int_{0}^{frac{pi}{2}} sin^n x dx &=& int_{0}^{frac{pi}{2}} sin^{n-1}x sin x dx \\ &=& frac{pi}{2} frac{(n-1)!!}{n!!} end{eqnarray} ちなみに(cos^n x)の積分は(sin^n x)の積分から導かれて以下のようになる。 begin{eqnarray} int_{0}^{frac{pi}{2}} sin^n x dx = int_{0}^{frac{pi}{2}} cos^n x dx = begin{cases} frac{(n-1)!!}{n!!} & nが奇数 \\ frac{pi}{2} frac{(n-1)!!}{n!!} & nが偶数 end{cases} end{eqnarray} 体積の話に戻ると、 begin{eqnarray} V_n = begin{cases} 2V_{n-1}frac{(n-1) (n-3) (n-5) cdots 2}{n (n-2) cdots 3} & nが奇数 \\ pi V_{n-1} frac{(n-1)(n-3)(n-5)cdots 3}{n (n-2) (n-4) cdots 2} & nが偶数 end{cases} end{eqnarray} 偶数のときと奇数のときで別になってしまっているのを1つにしたい。 偶数のとき(n=2k)、奇数のとき(n=2k-1)とおいて、それが等しいとする。 begin{eqnarray} V_{2k-1} &=& 2V_{2k-2} frac{(2k-2)(2k-4)(2k-6)cdots 2}{(2k-1) (2k-3) cdots 3 } \\ V_{2k} &=& pi V_{2k-1} frac{(2k-1)(2k-3)(2k-5)cdots 2}{2k (2k-2)(2k-4) cdots 2} end{eqnarray} 2つの式で(V_{2k-1})が現れるので、それで等式を立てる。 begin{eqnarray} 2V_{2k-2} frac{(2k-2)(2k-4)(2k-6)cdots 2}{(2k-1) (2k-3) cdots 3 } = frac{V_{2k}}{pi} frac{2k (2k-2)(2k-4) cdots 2}{(2k-1)(2k-3)(2k-5)cdots 2} end{eqnarray} ガンガン約分する。 begin{eqnarray} V_{2k} = 2pi V_{2k-2} frac{1}{2k} = frac{pi V_{2k-2}}{k} end{eqnarray} (V_{2k})と(V_{2k-2})の漸化式になっていて、(V_{2k-2})が(V_2)になるまで再帰的に計算する。 begin{eqnarray} V_{2k} = frac{pi^{k-1}}{k!} V_2 = frac{pi^k }{k!} end{eqnarray} 階乗の一般化(ガンマ関数,(n! = Gamma{(n+1)}))を使って書くと、 begin{eqnarray} V_n = frac{pi^{frac{n}{2}}}{Gamma{(frac{pi}{2}+1)}} end{eqnarray} (n)次の超球面の体積が出ました...。 次回、これを使って超高次元でメロンパンの皮が厚いのを示します..。

default eye-catch image.

決定木の分割基準,情報ゲイン,エントロピー

[mathjax] 集合に対して再帰的に境界を入れていく操作が決定木の作成。 では、集合のどこに境界を入れれば良いか。 属性をテストすることにより得られる情報量が最も大きくなるように入れる。 汎化能力、みたいな言葉を読んでいくにあたってこの先、結構抽象的な話になるので一度確認。 データが(n)個のクラスに分類できるとして、クラス(i)に属する確率を(P_i)とする。 このとき、あるデータがクラス(i)に属することを知るには(log_2 frac{1}{P_i})の情報量が必要。 その期待値は(I(P_1,P_2,cdots,P_n)=sum_{i=1}^{n} P_i log_2 frac{1}{P_i} = - sum_{n}^{i=1} P_i log_2 P_i)。 情報量の平均をエントロピーとか。 (D_p)個のデータを(D_{left})、(D_{right})に分割するとする。 その時、属性(f)に関する問いを使って分割する。 2分木の左ノード、右ノードだからleft,right。 (I(D_p))は分割前のエントロピー。 (I(D_{left}))、(I(D_{right}))は分割後のエントロピー。 分割前には(I(D_p))ビット必要だったのが、 分割後には(frac{N_{left}}{N_p} I(D_{left}) + frac{N_{right}}{N_p} I(D_{right}))ビット必要になった。と読むらしい。 その差を情報ゲイン(IG(D_p))と呼んで以下のように定義するらしい。 begin{eqnarray} IG(D_p,f) = I(D_P) - frac{N_{left}}{N_p} I(D_{left}) - frac{N_{right}}{N_p} I(D_{right}) end{eqnarray} 分割前よりも分割後の方が(IG(D_p,f))だけエントロピーが低い、という事実に関して、 分割に使った問いにより、(IG(D_p,f))の情報量を獲得した、と考えるらしい。 情報ゲインが最大になるような問いを根にもってきて、 再帰的に情報ゲインが大きいものから順に問うことで決定木を作っていく。

default eye-catch image.

計量テンソルの物理的な意味

はじめに Tensor Flowを理解するために計量テンソルの物理的な意味の理解が不可欠なので数式を追ってみた。ちょっと時間かかったけど、計量テンソルまではOK。スカラー、ベクトルを説明するまではまだ理解できてない。しかし、Ad-HocなIT技術ばかり触っていると、数式の美しさは格が違うな。 計量テンソルが直感的に何を表しているのかは最後だけでOK 変換係数αik=gijって何?を理解するために共変ベクトル、反変ベクトルの定義を遡る必要がある ベクトルと変換 ある座標系の基底ベクトル(e1,e2,e3)を、別の座標系のベクトル(e1\',e2\',e3\')に変換することを考える。適当な係数αijを使って線形結合で表現すると、 e1\'=α11e1+α12e2+α13e3 e2\'=α21e1+α22e2+α23e3 e3\'=α31e1+α32e2+α33e3 αikを変換係数と呼ぶ。変換係数により基底ベクトルeから別の規定ベクトルe\'への座標変換を決定している。 まとめると以下のように表現できる。(HTMLじゃ厳しいです...) ei\'=Σk=13αiikek ダッシュ付きベクトルとダッシュ無しベクトルを入れ替えると ek=Σl\'=13αkl\'el\' 上の式に下の式を代入する。これはダッシュ無しベクトルをダッシュ付きベクトルに変換する式に、ダッシュ付ベクトルをダッシュ無しベクトルに変換する式を代入することを表す。もっと言えば、変換と逆変換を同時に行ってみる。 ei\'=Σk=13Σl=13αi\'kαkl\'el\' この右辺はeiiにならないといけないので、 Σk=l3αi\'kαkl\'=0 (i\'≠l\') Σk=l3αi\'kαkl\'=1 (i\'=l\') ダッシュ付きベクトルとダッシュ無しベクトルを入れ替えても同様に、 Σk\'=13αk\'lαk\'l=0 (i≠l) Σk\'=13αk\'lαk\'l=1 (i=l) 見事な感じで、Σk=13Σl=13αi\'kαkl\'は単位行列ということになる。話を戻すと変換、逆変換を同時におこなうと元に戻る、ということになる。 なお、クロネッカーのデルタを使うと、 Σk=l3αi\'kαkl\'=0 (i\'≠l\') Σk=l3αi\'kαkl\'=1 (i\'=l\') は、以下のように1つにまとめられる。 αi\'kαkl\'=δi\'l\' 同様に、 Σk\'=13αk\'lαk\'l=0 (i≠l) Σk\'=13αk\'lαk\'l=1 (i=l) は、以下のように1つにまとめられる。 αk\'lαk\'l=δk\'l 共変ベクトルと反変ベクトル ある基底ベクトルe=(e1,e2,e3)を別の基底ベクトルe\'=(e1\',e2\',e3\')ベクトルに変換する際の座標変換は以下のように表される。 ei\'=αi\'kek この時、変換係数αi\'kを用いて、基底ベクトルの変換式と同一の変換式に従うベクトルA=A1e1+A22+A33を共変ベクトルと呼ぶ。 Ai\'=αi\'kAk 一方、添字を上下逆にした変換係数αki\'ckに従うベクトルC=C1e1+C2e2+C3e3を反変ベクトルという。 C\'i=αki\'Ck ここで、eiを共変基底、eiを反変基底とよぶ。 共変基底、反変基底には次式が成り立つ。 ei・ej=δij 計量テンソル 共変基底ek,ekを用いたベクトルA=Akek=Akek。 それぞれに添字を上下反転させた基底ei,eiとの内積を取る。 ei・A=Akek・ei=Ak(ei・ek) ei・A=Akek・ei=Ak(ei・ek) 共変基底、反変基底の積 ei・ek=gikとする。 ei・A=Akgik ei・A=Akgik A=Aiei=Aieiであるから、 ei・Aiei=Akgik ei・Aiei=Akgik 整理すると、 ei・ei Ai=Ai=gikAk ei・ei Ai=Ai=gikAk つまり以下。 Ai\'=gikAk Ai\'=gikAk これは、ベクトルの共変成分、反変成分の変換式である。 共変成分、反変成分を相互変換する変換係数gij(=αij)の意味 ベクトルrの長さが微小に変化したとする。その微小変化をベクトルdr=dxiei=dxieiとする。 ds2 =dr・dr =dxiei・dxjej=gijdxidxj =dxiei・dxjej=gijdxidxj =dxiei・dxjej=gujdxidxj =dxidxi ei-ejを座標系として取ったとき、dxi、dxjを成分とすることを表す。 また、ei-ejを座標系として取ったとき、dxi、dxjを成分とすることを表す。 これらの座標系で各座標軸に沿った変化分の単純な積dxidxj、dxidxjと、本当の変化分の2乗ds2の比がgij、gijであることを表す。 gij、gijを計量テンソルと呼ぶ。