Hadoop MapReduceで相関行列を計算する:ステップ6:共分散行列を計算する (step6: calculate covariance matrix)
前回までのログで
を計算することができた。
(注記:正確には、不偏分散を使用しているため、n-1で除算している:ステップ5)
ステップ6では共分散行列を計算する。
(注記:正確には、不偏分散を使用しているため、n-1で除算している:ステップ5)
この計算は、密な行列の乗算となるので、以前に作成した行列積のジョブ(Case2)を利用する。
このジョブは2つのプログラムから成り立っていた。
- TransformMatrix.java:標準の行列の入力フォーマットを「行列」の形に整形する。(注記:この際、行列を転置するかどうかを引数で指定できる)
- MatrixMult.java:「行列」の形に変換したデータをもとに、行列積を計算する。
注意が必要なのは、C=ABのBを転置行列として入力フォルダーに配置することである。
前回作成したプログラムの出力は、標準の形式になっている。
1 1 -0.78 1 2 -1.24 1 3 1.26 1 4 0.52 1 5 1.06 1 6 0.49 1 7 -1.48 1 8 -0.74 1 9 0.26 1 10 0.66 2 1 0.65 2 2 -0.05 2 3 1.05 2 4 1.05 2 5 -1.09 2 6 -0.45 2 7 -0.79 2 8 -0.09 2 9 -0.85 2 10 0.58 3 1 -0.98 3 2 0.99 3 3 -0.45 3 4 0.59 3 5 -0.41 3 6 0.65 3 7 -0.75 3 8 0.45 3 9 0.85 3 10 -0.95 4 1 0.8 4 2 -0.1 4 3 1.14 4 4 -1.3 4 5 -0.73 4 6 0.2 4 7 0.84 4 8 -0.7 4 9 0 4 10 -0.16 5 1 -0.73 5 2 0.34 5 3 0.24 5 4 1.34 5 5 1.14 5 6 -0.33 5 7 -0.53 5 8 -0.19 5 9 -1.26 5 10 -0.03 6 1 -0.44 6 2 -0.21 6 3 1.13 6 4 0.43 6 5 -0.11 6 6 -1.01 6 7 -0.77 6 8 0.19 6 9 -0.01 6 10 0.79 7 1 -0.8 7 2 -0.34 7 3 -0.47 7 4 -0.7 7 5 1.03 7 6 -0.5 7 7 0.63 7 8 1.16 7 9 0.93 7 10 -0.94 8 1 0.82 8 2 1.02 8 3 -0.54 8 4 -0.18 8 5 -1.48 8 6 1.56 8 7 1.66 8 8 -1.04 8 9 -0.78 8 10 -1.04 9 1 -1.13 9 2 -1.53 9 3 -0.09 9 4 0.84 9 5 1.41 9 6 -0.39 9 7 -0.33 9 8 1.21 9 9 1.51 9 10 -1.49 10 1 0.92 10 2 -0.61 10 3 1.09 10 4 -0.85 10 5 -0.21 10 6 0.05 10 7 0.09 10 8 -1.45 10 9 0.45 10 10 0.52
まず、これをTransformMatrix.javaによって、転置して「行列」の格好に変換する。
結果は以下となる。
1 -0.78 -1.24 1.26 0.52 1.06 0.49 -1.48 -0.74 0.26 0.66 2 0.65 -0.05 1.05 1.05 -1.09 -0.45 -0.79 -0.09 -0.85 0.58 3 -0.98 0.99 -0.45 0.59 -0.41 0.65 -0.75 0.45 0.85 -0.95 4 0.8 -0.1 1.14 -1.3 -0.73 0.2 0.84 -0.7 0.0 -0.16 5 -0.73 0.34 0.24 1.34 1.14 -0.33 -0.53 -0.19 -1.26 -0.03 6 -0.44 -0.21 1.13 0.43 -0.11 -1.01 -0.77 0.19 -0.01 0.79 7 -0.8 -0.34 -0.47 -0.7 1.03 -0.5 0.63 1.16 0.93 -0.94 8 0.82 1.02 -0.54 -0.18 -1.48 1.56 1.66 -1.04 -0.78 -1.04 9 -1.13 -1.53 -0.09 0.84 1.41 -0.39 -0.33 1.21 1.51 -1.49 10 0.92 -0.61 1.09 -0.85 -0.21 0.05 0.09 -1.45 0.45 0.52
次も同様に、TransformMatrix.javaによって転置した「行列」を、上とは異なったフォルダーに格納する。
これを入力として、MatrixMult.javaを実行する。
結果は以下となる。
1 1 8.61 1 2 1.45 1 3 -0.47 1 4 -1.25 1 5 2.77 1 6 3.16 1 7 -1.23 1 8 -6.06 1 9 3.41 1 10 2.17 2 1 1.45 2 2 5.71 2 3 -1.11 2 4 0.37 2 5 1.56 2 6 2.99 2 7 -4.57 2 8 -0.52 2 9 -3.23 2 10 1.07 3 1 -0.47 3 2 -1.11 3 3 5.47 3 4 -2.53 3 5 0.32 3 6 -0.74 3 7 1.23 3 8 0.58 3 9 2.79 3 10 -3.21 4 1 -1.25 4 2 0.37 4 3 -2.53 4 4 5.43 4 5 -3.29 4 6 -0.63 4 7 -1.22 4 8 3.85 4 9 -3.94 4 10 4.32 5 1 2.77 5 2 1.56 5 3 0.32 5 4 -3.29 5 5 5.82 5 6 1.67 5 7 -0.94 5 8 -2.49 5 9 1.23 5 10 -2.37 6 1 3.16 6 2 2.99 6 3 -0.74 6 4 -0.63 6 5 1.67 6 6 3.98 6 7 -1.03 6 8 -4.96 6 9 0.61 6 10 0.62 7 1 -1.23 7 2 -4.57 7 3 1.23 7 4 -1.22 7 5 -0.94 7 6 -1.03 7 7 6.27 7 8 -2.84 7 9 6.53 7 10 -2.38 8 1 -6.06 8 2 -0.52 8 3 0.58 8 4 3.85 8 5 -2.49 8 6 -4.96 8 7 -2.84 8 8 12.19 8 9 -6.72 8 10 0.85 9 1 3.41 9 2 -3.23 9 3 2.79 9 4 -3.94 9 5 1.23 9 6 0.61 9 7 6.53 9 8 -6.72 9 9 12.54 9 10 -3.11 10 1 2.17 10 2 1.07 10 3 -3.21 10 4 4.32 10 5 -2.37 10 6 0.62 10 7 -2.38 10 8 0.85 10 9 -3.11 10 10 5.76