アセットマネージャーのためのファイナンス機械学習:測度 練習問題
単位標準偏差と相関係数$${\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個にした場合
区分数を100個にした場合
$${\rho}$$に依存しない量:$${H [X ],H[Y]}$$
ただし、$${|\rho|\ne 1}$$では、$${H[X,Y],H[X|Y],VI, \tilde{VI}}$$の依存性は低い。
サイズを100万個にし再試行する。
区分数を10個にした場合、
区分数を100個にした場合
依存性は変わらないが、各観測量の値はサイズ数よりも区分数を大きくした方が、はっきりしたシグナルになる。