マネージャーのためのファイナンス機械学習: 相互情報量とVariation of Information

確率変数$${Y}$$を固定した時に減少する$${X}$$の不確実性を、相互情報量として、以下のように定義する。
$${I[X,Y]=H[X]-H[X|Y] = H[X]+H[Y]-H[X,Y] \\ = -\displaystyle{\Sigma_{x\in S_X} \Sigma_{y\in S_Y}p[x,y]\log \frac{p[x,y]}{p[x]p[y]} \ge 0 }}$$
この情報量は、二つの確率分布、同時分布$${p[x,y]}$$と分布積$${p[x]p[y]}$$間の情報量と解釈できるので、
$${I[X,Y]=D_{KL}[p[x,y]\|p[x]p[y]]=\displaystyle{\Sigma_{y\in S_Y}p[y]\Sigma_{x\in S_X}p[x|y]\log \left[ \frac{p[x|y]}{p[x]}\right]}}$$
とも表せる。
 明らかに、$${I[X,Y]=I[Y,X]}$$,$${I[X,X]=H[X]}$$であり、$${X}$$と$${Y}$$が独立している時、$${p[x,y]=p[x]p[y]}$$あるから、$${I[X,Y]=0}$$である。
 相互情報量は距離測度ではなく、グルーピングであり、クラスタリングアルゴリズムやフォワード特徴量選択において重要な尺度となる。

 シャノンエントロピーはscipyのstatsに、相互情報量は、sklearnにmutal_info_scoreで実装されている。
 これを使い、スニペット3.1において、同サイズの配列xとyが分割された規則的グリッドに離散化されている場合のエントロピー計算を行っている。

x = np.random.normal(0, 1, 1000)
y = np.random.normal(0, 1, 1000)
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
hX_Y=hXY-hY
hY_X=hXY-hX

相互情報量が、一方の変数が固定化されることによって生じる他方の不確実性の減少であり、その時にまだ残っている期待の不確実性が、Variation of Informationである。よって、$${VI[X,Y]=H[X|Y]+H[Y|X]=H[X]+H[Y]-2I[X,Y]}$$と定義される。
 $${X=Y}$$の時、最小値$$VI[X,Y]=0$$で、$${I[X,Y]=0}$$で最大値$${H[X,Y]}$$をとる。明らかに、$${VI[X,Y]=VI[Y,X]}$$で、三角不等式、$${VI[X,Z]\le VI[X,Y]+VI[Y,Z]}$$を満たすので、これは距離測度である。
 クラスター間の距離を比較したい場合において、$${(0,1)}$$間の間をとるように最大値$${H[X,Y]}$$で正規化しておく必要がある。
$${\widetilde{VI}[X,Y]=\displaystyle{ \frac{VI[X,Y]}{H[X,Y]}= 1-\frac{I[X,Y]}{H[X,Y]}} }$$
 $${\widetilde{VI}}$$の実装はスニペット3.2で行われている。

def varInfo(x,y,bins,norm=False):
    cXY=np.histogram2d(x,y,bins)[0]
    iXY=mutual_info_score(None,None,contingency=cXY)
    hX=ss.entropy(np.histogram(x,bins)[0])
    hY=ss.entropy(np.histogram(y,bins)[0])
    vXY=hX+hY-2*iXY
    if norm:
        hXY=hX+hY-iXY
        vXY/=hXY
    return vXY

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