LoginSignup
2
1

More than 1 year has passed since last update.

【プログラマーのための統計学】 共分散と共分散行列

Posted at

目次

プログラマーのための統計学 - 目次

概要

共分散と共分散行列(または分散共分散行列)について書く。
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 - 平均値))

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1