目次
概要
共分散と共分散行列(または分散共分散行列)について書く。
pythonのmultivariate_normalとかで使うやつ。
import numpy as np
# 期待値
mean = np.array([3, 5])
# 分散共分散行列(covariance matrix)
cov = np.array([[4, -1.2], [-1.2, 1]])
# 多変量正規分布に従う乱数を生成
np.random.multivariate_normal(mean, cov, size=200)
前提条件
この記事を読むには、以下を理解していることが前提となります。
共分散とは?何の役に立つの?
国語の点数が高い人は、数学の点数も高いのか?といった傾向を見るときに役に立つ。
Xが国語の点数、Yが数学の点数としたとき、 「Xの偏差 × Yの偏差」の平均 を出すことで求められる。
以下の生徒の共分散を算出してみる。(100点満点)
生徒 | 国語 | 数学 |
---|---|---|
A | 50 | 50 |
B | 50 | 70 |
C | 80 | 60 |
D | 70 | 90 |
E | 90 | 100 |
偏差の出し方については以下を参照
偏差とは、平均値と各データの差を全て足したものの平均のことです。
https://qiita.com/Esfahan/items/2e70635552d7d661bc6b#%E5%88%86%E6%95%A3
国語の平均点
68 = \dfrac{1}{5}(50+50+80+70+90)
数学の平均点
74 = \dfrac{1}{5}(50+70+60+90+100)
それぞれの「国語の偏差 × 数学の偏差」は以下のようになる。
\begin{align}
(A) \, 432 &= (50−68)(50−74) \\
(B) \, 72 &= (50-68)(70-74) \\
(C) \, −168 &= (80-68)(60-74) \\
(D) \, 32 &= (70-68)(90-74)) \\
(E) \, 572 &= (90-68)(100-74)
\end{align}
共分散は, 「Xの偏差 × Yの偏差」の平均なので,
188 = \dfrac{1}{5}(432+72-168+32+572)
となる。
この値が正の値であれば、国語の点数が高い人は数学も高い、(国語の点数が低い人は数学も低い、も成り立つ)
負の値であれば、国語の点数が高い人は数学の点数が低い、
0であれば(に近ければ)2つの科目に関係性は薄い、ということになる。
上記の例では188という大きな値が出ているので、国語の点数が高い人は数学も高い、という結果が得られたことになる。
共分散は以下の式で表すことができる。
Sxy = \frac{1}{n}(x-\vec{x})^{'}(y-\vec{y})
共分散の問題点
上記の例では100点満点同士の科目の比較をしたが、仮に片方が100点満点、もう片方が10点満点のように、単位が異なる場合共分散の数値が大きく変わってしまうので、共分散の値だけを見て一概に判断はできないという問題がある。
この問題を解消するには、相関係数というものを用いる。(今回は説明しない)
https://manabitimes.jp/math/854
分散共分散行列
分散共分散行列の求め方
上記の例と同じデータの分散共分散行列を求めてみる。
生徒 | 国語 | 数学 |
---|---|---|
A | 50 | 50 |
B | 50 | 70 |
C | 80 | 60 |
D | 70 | 90 |
E | 90 | 100 |
国語の平均点
E[X] = 68 = \dfrac{1}{5}(50+50+80+70+90)
数学の平均点
E[Y] = 74 = \dfrac{1}{5}(50+70+60+90+100)
偏差ベクトル(平均からの差)
生徒 | 国語 | 数学 |
---|---|---|
A | (50−68) | (50−74) |
B | (50-68) | (70-74) |
C | (80-68) | (60-74) |
D | (70-68) | (90-74) |
E | (90-68) | (100-74) |
国語の分散
σ^2_{x} = 256 = \dfrac{1280}{5} = \dfrac{1}{5}((50−68)^2+(50-68)^2+(80-68)^2+(70-68)^2+(90-68)^2)
数学の分散
σ^2_{y} = 344 = \dfrac{1720}{5} = \dfrac{1}{5}((50−74)^2+(70-74)^2+(60-74)^2+(90-74)^2+(100-74)^2)
国語と数学の共分散(前項で算出してるので過程は省略)
\sigma_{XY} = 188 = \dfrac{1}{5}(432+72-168+32+572)
分散共分散行列は以下となる。
Σ = \begin{pmatrix}
256 & 188 \\
188 & 344
\end{pmatrix}
共分散行列のまとめ
共分散行列は以下のように表すことができる。
\begin{bmatrix}
S_{xx} & S_{xy} \\
S_{xy} & S_{yy}
\end{bmatrix}
式の形から、「xの分散」は「xとxの共分散」と同じなのでSxxと表す。(前述の例では国語の分散=256)
同様に、「yの分散」は「yとyの共分散」と同じなので Syyで表す。(前述の例では数学の分散=344)
xの分散 = (x - 平均値)^2 = xとxの共分散 = (x - 平均値)(x - 平均値)) \\
yの分散 = (y - 平均値)^2 = yとyの共分散 = (y - 平均値)(y - 平均値))
参考