アセットマネージャーのためのファイナンス機械学習:離散化された確率変数のエントロピー

有限の標本からエントロピーを推定するには、観測値の全範囲を等しいサイズ$${\Delta_X}$$の$${B_X}$$個の小区分に分割する。
$${\Delta_X=(\max\{X\}-\min\{X\})/B_X}$$
 $${i}$$番目の区分に入る観測値の頻度を$${f_X[x_i]}$$とすれば、$${i}$$番目の区分$${X_i}$$に観測値が入る確率$${p[X_i]}$$は、
$${p[X_i]=f_X[x_i]\Delta_X=\displaystyle{\frac{N_i}{N}}}$$と与えられる。ここで、
$${N_i}$$は$${i}$$番目の区分に入っている観測値の数で、 $${N}$$は観測値の総数で、$${\displaystyle{\Sigma_{i=1}^{B_X}N_i=N}}$$、
$${\displaystyle{\Sigma_{i=1}^{B_X}p[X_i]=1}}$$
 これらを用いて、エントロピーは、
$${H[X]\simeq -\displaystyle{\Sigma^{B_X}_{i=1}f_X[x_i]\log\left[f[x_i] \right]\Delta_X}}$$と定義される。
 よって、離散化されたエントロピーの推定値は、
$${\hat{H}[X]=-\displaystyle{\Sigma_{i=1}^{B_X}\frac{N_i}{N}\log\frac{N_i}{N} + log\Delta_X}}$$となり、離散化された確率変数$${X}$$と$${Y}$$の結合エントロピーは、以下の様に表される。
$${\hat{H}[X]=-\displaystyle{\Sigma_{i=1}^{B_X}\Sigma_{j=1}^{B_Y}\frac{N_{ij}}{N}\log\frac{N_{ij}}{N} + log\Delta_X\Delta_Y }}$$
 これらから、$${\hat{H}[X|Y]}$$、$${\hat{I}[X,Y]}$$、$${\hat{VI}[X,Y]}$$が導かれるが、これらの値は、$${B_X}$$と$${B_Y}$$に強く依存する。
 単確率変数のエントロピー推定には、
$${B_X = round \displaystyle{ \left[ \frac{\zeta}{6} + \frac{2}{3 \zeta}+\frac{1}{3} \right] }}$$
$${\zeta=\displaystyle{\sqrt[3]{8+324N+12\sqrt{36N+129N^2}}}}$$が最適であるとされ、

二つの確率変数の結合エントロピーには、
$${B_X=B_Y=round \displaystyle{ \left[ \frac{1}{2} \sqrt{1+\sqrt{1+\frac{24N}{1-\hat{p}^2}}}\right]}}$$
が最適であるとされている。ここで、$${\hat{p}}$$は推定相関係数である。
 スニペット3.3で、最適な区分数を計算し、これを用いた正規化されたVIの計算が実装されている。

def numBins(nObs,corr=None):
    if corr is None:
        z=(8+324*nObs+12*(36*nObs+729*nObs**2)**.5)**(1/3.)
        b=round(z/.6+2./(3*z)+1./3)
    else:
        b=round(2**-.5*(1+(1+24*nObs/(1.-corr**2))**.5)**.5)
    return int(b)

def varInfo2(x,y,norm=False):
    bXY=numBins(x.shape[0],corr=np.corrcoef(x,y)[0,1])
    cXY=np.histogram2d(x,y,bXY)[0]
    iXY=mutual_info_score(None,None,contingency=cXY)
    hX=ss.entropy(np.histogram(x,bXY)[0])
    hY=ss.entropy(np.histogram(y,bXY)[0])
    vXY=hX+hY-2*iXY
    if norm:
        hXY=hX+hY-iXY
        vXY/=hXY
    return vXY

この記事が気に入ったらサポートをしてみませんか?