1

私は現在、〜3万行の行列(すべての値が[0,1]の範囲内)の共分散行列を計算しようとしていますが、非常に長い時間がかかります(何時間も実行させましたが、まだ実行されていません完了していません)。

小さな例 (7k 行の行列) で気づいたことの 1 つは、出力された値の有効桁数がばかげていること (例: ~10^32) であり、速度が低下している (およびファイルサイズが増加している) 可能性があることです。これを制限するには?

私は単純なデータフレームで numpys 共分散法を使用してきました:

import numpy as np
import pandas as pd
import sklearn as sk

df = pd.read_csv('gene_data/genetic_data25.csv')

df = df.set_index('ID_REF')
df = (df-df.min(axis = 0))/(df.max(axis = 0)-df.min(axis = 0))

cov = np.cov(df)

cov = pd.DataFrame(cov)

cov.to_csv('/gemnetics/cov_matrix.csv')
4

1 に答える 1

1

私は遺伝学に詳しくないので、一般的なガイドラインを示し、それが機能することを願っています. X30+k x 1kという行列にデータがあると仮定しましょう。データを正規化する必要はありませんが (問題がない場合を除きます)、共分散を計算するには、データを中央に配置する必要があります。次に、正しい固有ベクトルを計算できます。

Xp=X-X.mean(axis=0,keepdims=True)
k=Xp.T @ Xp
ev,R=np.linalg.eigh(k)
ev=ev[::-1]
R=R[:,::-1]

この時点で、固有値を調べて、それらに急激な低下があるかどうかを確認する必要があります (これはスクリー法です)。このカットオフ数を と呼びましょうn。そうでない場合は、保持する固有値のパーセントを選択するだけです。次のステップは、左の固有ベクトルを再構築することです。

L=X @ R[:,:n]

固有ベクトルR.Tのどの組み合わせが重要で、固有ベクトル ( L) が遺伝子の最も顕著な組み合わせであるかがわかります。これが役立つことを願っています。

于 2018-07-27T15:39:55.873 に答える