アセットマネージャーのためのファイナンス機械学習:クラスタリング モンテカルロシミュレーション

観測データのサイズ$${N=8,16,32}$$のそれぞれについて、クラスタ数$${K=3,6, \dots N/2}$$の相関行列を作り、シャッフルした後、ONCでクラスタ数を推定するモンテカルロシミュレーションを行い、$${K/N}$$につき、$${E[K]/K}$$の平均とエラーを集計する。

N=[8,16,32,48]
M=2
num=100
results={}


for n in N:
    print(n)
    for k in range(3,int(n/2)+1,3):
        E=0;
        for i in range(1,num):
            corr0 = randomBlockCorr(n, k, minBlockSize=M)
            corr1=ShuffleMatrix(corr0)
            corr1New, clstrs1New, silh1New = clusterKMeansTop(corr1)
            E+=len(clstrs1New)/k
        key=k/n
        results.setdefault(key,[]).append(E/num)

df=pd.DataFrame()

for mky,mv in results.items():
    n_mv=len(mv)
    avg=sum(mv)/n_mv
    err=0.0
    for i in range(1,n_mv):
        err+=(mv[i]-avg)*(mv[i]-avg)
    err/=n_mv
    list_=[[mky,round(avg,3),round(err,3)]]
    df_new=pd.DataFrame(list_,columns=['K/N','E[K]/K','ERR'])
    df=pd.concat([df,df_new])


いいなと思ったら応援しよう!