アセットマネージャーのためのファイナンス機械学習:特徴量の重要度分析 練習問題 クラスターMDI /MDA Variation of Information

クラスターMDAの適用を、特徴量を相関行列の測度空間に対し行った。
ここで、同じ特徴量をVariation of Informationの測度空間に写して、クラスタリングし、クラスターMDAで特徴量重要度分析を行う。

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):
    import scipy.stats as ss
    from sklearn.metrics import mutual_info_score
    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

VI=pd.DataFrame(0.0,columns=X.columns,index=X.columns)
for i in range(X.shape[1]):
    for j in range(i+1,X.shape[1]):
        VI.iloc[i,j]=varInfo2(X.iloc[:,i],X.iloc[:,j],norm=True)
        VI.iloc[j,i]=VI.iloc[i,j]

corrVI,clstrsVI,silhVI=onc.clusterKMeansBase(VI,maxNumClusters=10,n_init=10)
sns.heatmap(corrVI,cmap='viridis')
VIによるクラスタリング

クラスターMDI

imp=featImpMDI_Clustered(fit,X.columns,clstrsVI)
imp.sort_values('mean', inplace=True)
plt.figure(figsize=(10, imp.shape[0] / 5))
imp['mean'].plot(kind='barh', color='b', alpha=0.25, xerr=imp['std'],
                 error_kw={'ecolor': 'r'})
plt.title('Clustered MDI results')
plt.show()
VIによるクラスタMDI

クラスターMDA

imp=featImpMDA_Clustered(clf,X,y['bin'],clstrsVI,10)
imp.sort_values('mean', inplace=True)
plt.figure(figsize=(10, imp.shape[0] / 5))
imp['mean'].plot(kind='barh', color='b', alpha=0.25, xerr=imp['std'],
                 error_kw={'ecolor': 'r'})
plt.title('Clustered MDA results')
plt.show()
VIによるクラスタMDA

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