はじめに
これは筆者の勉強まとめページですので、指摘しまくってい頂けると幸いです
行列分解法
をベースに行列方程式を解く方法が行列分解法と呼ばれるものである。
今回はコレスキー分解と呼ばれる行列を用いて線形回帰を解く。
コレスキー分解についてはWikiを参照
コレスキー分解を施すと行列Aが以下のような形で表すことができる
$$ A = L・L^{'}$$
$$ L・L^{'}・x = b $$
$$ L・y = b $$
$$ L^{'}・x = y $$
この行列方程式を解いていくと解を算出できる
コレスキー分解を行うと、計算効率がよくなるため、逆行列法を用いるよりも良いとされているアルゴリズムである
# コレスキー分解
tA_A = tf.matmul(tf.transpose(A_tensor), A_tensor)
L = tf.cholesky(tA_A)
tA_b = tf.matmul(tf.transpose(A_tensor), b)
sol1 = tf.matrix_solve(L, tA_b)
sol2 = tf.matrix_solve(tf.transpose(L), sol1)
行列分解法の記事の演算をちょっと置き換えるだけ
TensorFlow便利だなあ(棒)