Извините, если это дубликат какой-либо темы. Я знаю, что существует много разложений для разложения матрицы (например, LU
или SVD
), но теперь у меня есть произвольная неквадратная матрица, и я хочу разложить ее на произведение двух матриц заданной формы . Если точного решения не существует, я хочу найти метод наименьших квадратов. Если существует более одного решения, любое из них подойдет.
Я использовал итерационные методы, подобные этому:
A = np.random.rand(...)
B = np.random.rand(...)
for i in range(999):
A = np.linalg.lstsq(B.T, Y.T, None)[0].T
B = np.linalg.lstsq(A, Y, None)[0]
Это просто, но я обнаружил, что оно сходится сублинейно (на самом деле логарифмически), что медленно. Я также обнаружил, что иногда (или часто?) «Возвращается» к очень высокой потере L2. Мне интересно, есть ли улучшения в этом или просто решение AB=Y
должно быть сделано совершенно другим способом?
Большое спасибо!