アセットマネージャーのためのファイナンス機械学習:特徴量の重要度分析 練習問題 クラスター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')
クラスター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()
クラスター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()
この記事が気に入ったらサポートをしてみませんか?