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