pythonで共分散行列をもとめるには (numpy、pandas)


主成分分析なんかでよく出てくる共分散行列。

  • numpy.cov
  • pandas なら DataFrame の cov()

で計算してくれます。

ちなみに、共分散行列には2種類あります。

  • 標本共分散行列 : \(\large\frac{1}{n}\sum_{i=1}^n (\vec{x}_i-\vec{m})(\vec{x}_i-\vec{m})^T\)
  • 不偏共分散行列 : \(\large\frac{1}{n-1}\sum_{i=1}^n (\vec{x}_i-\vec{m})(\vec{x}_i-\vec{m})^T\)

     (n はデータ数、\(\vec{m}\) は平均値のベクトル)

n で割るか、n-1 で割るかの違いです。

- 目次 -

スポンサーリンク

numpy

標本分散、不偏分散のどちらも計算できます。

デフォルトは不偏分散(bias=0)です。

rowvar

上の例はデータが縦方向に並んでいる場合の計算です。

cov1

下図のように、データが横方向に並んでいる場合は rowvar=1 を指定します。

cov2

pandas の DataFrame

不偏分散だけのようです。

スポンサーリンク

コメントはお気軽に