Существует математическая теорема, в которой утверждается, что матрица A, умноженная на ее транспонирование, дает симметричную положительно определенную матрицу (что приводит к положительным собственным значениям). Почему тест симметричности здесь не выполняется для матриц среднего размера? Это всегда работает для небольших матриц (20,20 и т.д.)Симметрия матрицы автоковариации путем умножения функциональной матрицы с ее транспонированием
import numpy as np
features = np.random.random((50,70))
autocovar = np.dot(np.transpose(features),features)
print((np.transpose(autocovar) == autocovar).all())
Я всегда получаю «FALSE» работает этот код. Что я делаю неправильно? Мне нужна матрица автоковариации для выполнения СПС, но до сих пор я получаю сложные собственные значения ...
Спасибо!
Большое спасибо! Это прекрасно работает. В то же время у меня возникла идея использовать: 'autocovar = np.round (np.dot (np.transpose (features), features), 3)' , который дает тот же результат. Спасибо! – dopexxx
Без проблем! Я попробовал ваш код, и он прошел тест на симметрию. Но это намного больше, чем исходная матрица, поэтому я буду осторожен. Чтобы быть более точным, если 'X' является исходной, несимметричной, но численно-симметричной матрицей,' X1' определяется как в моем ответе, так и 'X2', как в вашем ответе,' np.linalg.norm (X-X1, 'fro ') 'и' np.linalg.norm (X-X2,' fro ') 'совершенно разные. Первый имеет точность до 12 цифр, в то время как последний едва получает одну цифру. Просто предупреждение. –
Спасибо, что позволил мне теперь, что я совершенно новый для Python и машинного обучения вообще! :) – dopexxx