В настоящее время я пытаюсь вычислить матрицу ковариации для матрицы строк в 30 тыс. (Все значения находятся в диапазоне [0,1]), и она занимает очень много времени (я позволил ей работать больше и час, и она все еще имеет завершено).
Одна вещь, которую я заметил на более мелких примерах (матрица строк 7k), состоит в том, что выведенные значения имеют смехотворное количество значимых цифр (например, ~ 10 ^ 32) и могут замедлять работу (и увеличивать размер файла) --is там любым способом ограничить это?
Я использую метод ковариации 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')
Поскольку я не знаком с генетикой, я дам вам общие рекомендации и надеюсь, что это сработает. Предположим, что у вас есть данные в матрице X
которая равна 30 + k на 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]
На этом этапе вы должны посмотреть на собственные значения, чтобы увидеть, есть ли в них резкое падение (это метод Scree), позвольте этому номеру отсечки n
. Если нет, то вам просто нужно выбрать, какой процент собственных значений вы хотите сохранить. Следующим шагом будет восстановление левых собственных векторов:
L=X @ R[:,:n]
Теперь RT
говорит вам, какая комбинация собственных векторов важна, а собственные векторы (L
) являются наиболее заметными комбинациями ваших генов. Надеюсь, это поможет.
cov
должен быть нормализован, поэтому эти большие числа не имеют смысла. Вы должны знать, если у вас есть прямоугольная матрица с одним измерением намного большим, чем другое (строки в вашем случае), то решение матрицы cov таким способом неэффективно из-за пустых пространств.