アセットマネージャーのためのファイナンス機械学習:測度 練習問題

単位標準偏差と相関係数$${\rho \in \{-1,0.5, 0, 0.5, 1\}}$$を持つ2変量正規分布から1000個の観測値、$${X}$$と$${Y}$$を作成する。
 観測値を離散化し、周辺エントロピー、結合エントロピー、条件付きエントロピー、相互情報量、VI:Variation of Information、正規化されたVIを求め、其々の$${\rho}$$への依存性を明らかにせよ。

import numpy as np
import pandas as pd

corr_coef = [-1., -0.5, 0, 0.5, 1.]

size,seed=1000,0
np.random.seed(seed)
df=pd.DataFrame()
list_=[[corr,hX,hY,hXY,hX_Y,iXY,vXY,norm_vXY]]

for corr in corr_coef:
    x=np.random.normal(size=size)
    e=np.random.normal(size=size)
    y=corr*x + (1-corr**2)**.5*e
    
    #bXY=numBins(x.shape[0],corr=np.corrcoef(x,y)[1][0])
    #cXY=np.histogram2d(x,y,bXY)[0]
    bins=10
    cXY=np.histogram2d(x,y,bins)[0]
    hX=ss.entropy(np.histogram(x,bins)[0])
    hY=ss.entropy(np.histogram(y,bins)[0])
    iXY=mutual_info_score(None,None, contingency=cXY)
    iXYn=iXY/min(hX,hY)
    hXY=hX+hY-iXY
    vXY=hX+hY-2*iXY
    hX_Y=hXY-hY
    hY_X=hXY-hX
    norm_vXY=vXY/hXY
    list_=[[corr,round(hX,3),round(hY,3),round(hXY,3),round(hX_Y,3),round(iXY,3),round(vXY,3),round(norm_vXY,3)]]
    df_new=pd.DataFrame(list_,columns=['rho','hX','hY','hXY','hX_Y','iXY','vXY', 'norm_vXY'])
    df=pd.concat([df,df_new])

print(df)

区分数を10個にした場合

size=1000, bins=10

区分数を100個にした場合

size=1000, bins=100

$${\rho}$$に依存しない量:$${H [X ],H[Y]}$$
ただし、$${|\rho|\ne 1}$$では、$${H[X,Y],H[X|Y],VI, \tilde{VI}}$$の依存性は低い。

サイズを100万個にし再試行する。
 区分数を10個にした場合、

size=1000000,bins=10


 区分数を100個にした場合

size=1000000,bins=100

依存性は変わらないが、各観測量の値はサイズ数よりも区分数を大きくした方が、はっきりしたシグナルになる。

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