からっぽのしょこ

読んだら書く!書いたら読む!同じ事は二度調べ(たく)ない

3.4:相関係数の計算式【『スタンフォード線形代数入門』のノート】

はじめに

 『スタンフォード ベクトル・行列からはじめる最適化数学』の学習ノートです。
 「数式の行間埋め」や「Pythonを使っての再現」によって理解を目指します。本と一緒に読んでください。

 この記事は3.4節「角度」の内容です。
 相関係数の定義を確認して、計算式を導出します。

【前の内容】

www.anarchive-beta.com

【他の内容】

www.anarchive-beta.com

【今回の内容】

相関係数の定義

 相関係数(correlation coefficient)の定義を数式で確認して、平均除去ベクトルや標準化ベクトルを用いた計算式を導出します。
 標準化については「https://www.anarchive-beta.com/entry/2023/03/21/130000」を参照してください。

共分散と標準偏差による定義式

 相関係数は、共分散と各変数の標準偏差の商で定義されます。

 \displaystyle
\rho
    = \frac{
          \mathrm{cov}(\mathbf{a}, \mathbf{b})
      }{
          \mathrm{std}(\mathbf{a}) \mathrm{std}(\mathbf{b})
      }
    = \frac{
          \frac{1}{n}
          \sum_{i=1}^n \Bigl\{
              (a_i - \mathrm{avg}(\mathbf{a}))
              (b_i - \mathrm{avg}(\mathbf{b}))
          \Big\}
      }{
          \sqrt{
              \frac{1}{n}
              \sum_{i=1}^n
                  (a_i - \mathrm{avg}(\mathbf{a}))^2
          }
          \sqrt{
              \frac{1}{n}
              \sum_{i=1}^n
                  (b_i - \mathrm{avg}(\mathbf{b}))^2
          }
      }

 この式は、平方根の性質 \sqrt{x y} = \sqrt{x} \sqrt{y} \sqrt{x}^2 = xより、分母分子の \frac{1}{n}の項が打ち消されます。

 \displaystyle
\begin{align}
\rho
   &= \frac{
          \frac{1}{n}
          \sum_{i=1}^n \Bigl\{
              (a_i - \mathrm{avg}(\mathbf{a}))
              (b_i - \mathrm{avg}(\mathbf{b}))
          \Big\}
      }{
          \sqrt{\frac{1}{n}}
          \sqrt{\frac{1}{n}}
          \sqrt{
              \sum_{i=1}^n
                  (a_i - \mathrm{avg}(\mathbf{a}))^2
          }
          \sqrt{
              \sum_{i=1}^n
                  (b_i - \mathrm{avg}(\mathbf{b}))^2
          }
      }
\\
   &= \frac{
          \sum_{i=1}^n \Bigl\{
              (a_i - \mathrm{avg}(\mathbf{a}))
              (b_i - \mathrm{avg}(\mathbf{b}))
          \Big\}
      }{
          \sqrt{
              \sum_{i=1}^n
                  (a_i - \mathrm{avg}(\mathbf{a}))^2
          }
          \sqrt{
              \sum_{i=1}^n
                  (b_i - \mathrm{avg}(\mathbf{b}))^2
          }
      }
\tag{1}
\end{align}


平均除去ベクトルによる計算式

 共分散と標準偏差による計算式(1)について、偏差の項を \tilde{x}_i = x_i - \mathrm{avg}(\mathbf{x})と置きます。

 \displaystyle
\rho
    = \frac{
          \sum_{i=1}^n
              \tilde{a}_i \tilde{b}_i
      }{
          \sqrt{
              \sum_{i=1}^n
                  \tilde{a}_i^2
          }
          \sqrt{
              \sum_{i=1}^n
                  \tilde{b}_i^2
          }
      }

 さらに、平均除去ベクトル

 \displaystyle
\tilde{\mathbf{x}}
    = \begin{bmatrix}
          \tilde{x}_1 \\ \tilde{x}_2 \\ \vdots \\ \tilde{x}_n
      \end{bmatrix}
    = \begin{bmatrix}
          x_1 - \mathrm{avg}(\mathbf{x}) \\ 
          x_2 - \mathrm{avg}(\mathbf{x}) \\ 
          \vdots \\ 
          x_n - \mathrm{avg}(\mathbf{x})
      \end{bmatrix}
    = \begin{bmatrix}
          x_1 \\ x_2 \\ \vdots \\ x_n
      \end{bmatrix}
      - \mathrm{avg}(\mathbf{x})
        \begin{bmatrix}
          1 \\ 1 \\ \vdots \\ 1
        \end{bmatrix}
    = \mathbf{x}
      - \mathrm{avg}(\mathbf{x}) \mathbf{1}

の内積とユークリッドノルムに置き換えられます。

 \displaystyle
\rho
    = \frac{
          \tilde{\mathbf{a}}^{\top}
          \tilde{\mathbf{b}}
      }{
          \|\tilde{\mathbf{a}}\|
          \|\tilde{\mathbf{b}}\|
      }
\tag{2}

 平均除去ベクトルを用いた計算式が得られました。

 この式は、なす角の定義式の一部と同じ形をしています。

 \displaystyle
\theta
    = \arccos \left(
          \frac{
              \mathbf{a}^{\top} \mathbf{b}
          }{
              \|\mathbf{a}\| \|\mathbf{b}\|
          }
      \right)

 平均除去ベクトルのなす角と相関係数の関係については「【Python】3.4:2つのベクトルのなす角と相関係数の関係の可視化【『スタンフォード線形代数入門』のノート】 - からっぽのしょこ」を参照してください。

標準化ベクトルによる計算式

 平均除去ベクトル \tilde{\mathbf{x}}のユークリッドノルムを考えます。

 \displaystyle
\begin{aligned}
\|\tilde{\mathbf{x}}\|
   &= \sqrt{
          \sum_{i=1}^n
              \tilde{x}_i^2
      }
\\
   &= \sqrt{
          \sum_{i=1}^n
              (x_i - \mathrm{avg}(\mathbf{x}))^2
      }
\end{aligned}

 偏差 x_i - \mathrm{avg}(\mathbf{x})の2乗和の平方根なので、右辺に \sqrt{\frac{n}{n}} = 1を掛けると、(式の一部を)標準偏差に変形できます。

 \displaystyle
\begin{aligned}
\|\tilde{\mathbf{x}}\|
   &= \frac{\sqrt{n}}{\sqrt{n}}
      \sqrt{
          \sum_{i=1}^n
              (x_i - \mathrm{avg}(\mathbf{x}))^2
      }
\\
   &= \sqrt{n}
      \sqrt{
          \frac{1}{n}
          \sum_{i=1}^n
              (x_i - \mathrm{avg}(\mathbf{x}))^2
      }
\\
   &= \sqrt{n}
      \mathrm{std}(\mathbf{x})
\end{aligned}

 「平均除去ベクトルのノルム \|\tilde{\mathbf{x}}\|」と「元のベクトルの標準偏差 \mathrm{std}(\mathbf{x})」の関係式が得られました。

 平均除去ベクトルによる計算式(2)について、ノルムの項を標準偏差を使った式に置き換えます。

 \displaystyle
\begin{aligned}
\rho
   &= \frac{
          \tilde{\mathbf{a}}^{\top}
          \tilde{\mathbf{b}}
      }{
          \|\tilde{\mathbf{a}}\|
          \|\tilde{\mathbf{b}}\|
      }
\\
   &= \frac{
          \tilde{\mathbf{a}}^{\top}
          \tilde{\mathbf{b}}
      }{
          \sqrt{n} \mathrm{std}(\mathbf{a})
          \sqrt{n} \mathrm{std}(\mathbf{b})
      }
\\
   &= \frac{
          \tilde{\mathbf{a}}^{\top}
          \tilde{\mathbf{b}}
      }{
          n
          \mathrm{std}(\mathbf{a})
          \mathrm{std}(\mathbf{b})
      }
\end{aligned}

 分母分子の \mathbf{a}, \mathbf{b}の項について、それぞれの標準化ベクトル

 \displaystyle
\mathbf{z}
    = \begin{bmatrix}
          z_1 \\ z_2 \\ \vdots \\ z_n
      \end{bmatrix}
    = \begin{bmatrix}
          \frac{x_1 - \mathrm{avg}(\mathbf{x})}{\mathrm{std}(\mathbf{x})} \\ 
          \frac{x_2 - \mathrm{avg}(\mathbf{x})}{\mathrm{std}(\mathbf{x})} \\ 
          \vdots \\ 
          \frac{x_n - \mathrm{avg}(\mathbf{x})}{\mathrm{std}(\mathbf{x})}
      \end{bmatrix}
    = \frac{
          \mathbf{x}
          - \mathrm{avg}(\mathbf{x}) \mathbf{1}
      }{
          \mathrm{std}(\mathbf{x})
      }

 \mathbf{u}, \mathbf{v}として、置き換えられます。

 \displaystyle
\rho
    = \frac{\mathbf{u}^{\top} \mathbf{v}}{n}

 標準化ベクトルを用いた計算式が得られました。

 この記事では、相関係数の定義と計算式を確認しました。次の記事では、相関係数を可視化します。

参考書籍

  • Stephen Boyd・Lieven Vandenberghe(著),玉木 徹(訳)『スタンフォード ベクトル・行列からはじめる最適化数学』講談社サイエンティク,2021年.

おわりに

 ノルムの話や標準偏差の話がちらほら出てきて構成に悩みます。この節で出てきた少し発展した内容についてもそれぞれの節の記事に書き足そうと思います。

 これまで読んだ本は、始めに何に使うのか分からない状態であれこれ知識を仕入れて、後々に伏線を回収するように利用する構成が多かったです。これだと学習序盤で迷子になりがちでした。
 この本は、必要になる都度知識が加えられる構成なんですね。こちらは話の流れが一直線で分かりやすいんですが、網羅的に理解する段階で頭の中で再構成する必要があります。あ、どちらも私の感覚です。
 本を書くってホント難しいですね。それに比べると、ブログの場合はネット的にリンクできるのでやりやすい気がしてきました。

 現段階では前後の章くらいの繋がりは意識しつつそれぞれの内容を書いて、2周目の際に(そんな機会があれば)再構成しようと思います。

【次の内容】

www.anarchive-beta.com