デジタル・デザイン・ラボラトリーな日々

アラフィフプログラマーが数学と物理と英語を基礎からやり直す。https://qiita.com/yaju

Σ(シグマ)の数式を理解してみる

Σ(シグマ)って何

高校2年生頃に数列としてΣ(シグマ)という数式を習います。
例えば、1からnまでの数列の総和を求めなさいといった場合、下記のよう数式になります。
1+2+3+\cdots+n
\displaystyle \sum_{k=1}^{n}{a_{k}}=\Large a_1+a_2+a_3+\cdots+a_n

このくらいは簡単に理解できますね。
ちなみに、1からnまでの数列の総和は下記の公式で簡単に求めることが出来ます。
\displaystyle \sum_{k=1}^{n}{{k}}=\frac1{2}n(n+1)
参照:ガウスの少年時代の逸話

あと、足し算ではなく掛け算の場合、Π(パイ)という数式を使います。
1 \times 2 \times 3 \times \cdots+n
\displaystyle \prod_{k=1}^{n}{a_{k}}=\Large a_1 \times a_2 \times a_3 \times \cdots \times a_n
でも、掛け算の場合は対数にして掛け算を足し算に変換するため、Σ(シグマ)にすることが多いです。

Σ(シグマ)の意味

Σの意味は「合計」です。英語で言えば、「sum」です。
そして、Σは「シグマ」と読むギリシャ文字(σの大文字)で、英語のアルファベットの「S」(sの大文字)に相当します。
ですから、頭文字としてΣが使われます。

Σ(シグマ)の入門

世間的にはビッグデータを活用しようと統計学を学ぶ機会が増えてきました。
幾つかのデータの総和と平均値を求める数式を作成してみます。
データを x_1, x_2, x_3,\cdots,x_nとした場合、
合計値 \Large S_n = \displaystyle \sum_{i=1}^{n}{{x_i}}=\Large x_1+x_2+x_3+\cdots+x_n
平均値 \Large \bar{x} =\displaystyle {1 \over n} \sum_{i=1}^{n} x_i

ここで急に変数を k から i に変更しましたが、これは好みの問題です。
公式では変数は k なのですが、プログラムを組む側とすると繰り返し変数は i の方が馴染みやすいというだけです。
qiita.com

Σ(シグマ)の応用

統計学で急に難しく感じるのは標準偏差ですよね。数式も急に複雑に感じます。
標準偏差 \sigma = \sqrt{\displaystyle {1 \over n} \sum_{i=1}^n(x_i - \bar{x})^2 }

これを紐解いていきます。自分は自身の学習のためにこれから書いていきますが、標準偏差については図入りで分かりやすい下記サイトを見るといいでしょう。
qiita.com

標準偏差の数式の中身を分解していきます。
(x_i - \bar{x})
これは何をしているかというと、各データ(x_i)と平均値(\bar{x})の差を求めています。
これを「偏差」といいます。※平均値(\bar{x})については、Σ(シグマ)の入門のところで数式を求めましたよね。

先ほどのQiitaのサイトのデータを拝借してみます。
各IDの数学の点数から平均値の81を減算します。

ID 点数 偏差
1 96 96-81= 15
2 63 63-81= -18
3 85 85-81= 4
4 66 66-81= -15
5 91 91-81= 10
6 89 89-81= 8
7 77 77-81= -4

次に進みます。
\displaystyle \sum_{i=1}^n(x_i - \bar{x})^2
これは、先程の偏差をそれぞれ2乗して総和を求めます。

ID 偏差 偏差^2
1 15 15^2 = 225
2 -18 -18^2 = 324
3 4 4^2 = 16
4 -15 -15^2= 225
5 10 10^2 = 100
6 8 8^2 = 64
7 -4 -4^2 = 16

総和は 225+324+16+225+100+64+16 = 970 となります。

ちなみに2乗しないまま総和すると、15-18+4-15+10+8-4 = 0と値が 0 になってしまいます。
2乗することで負数がなくなりすべて正数になります。
単純に正数にするなら絶対値でいいのではないかという疑問がわくと思います。余談ですが、実際「平均偏差」の場合は絶対値を使っています。
rikunora.hatenablog.com

ここは、ピタゴラスの定理(三平方の定理)を思い出して欲しいのです。直角三角形の斜辺の長さを求めるには\sqrt{x^2 + y^2}
つまり、「データのばらつきとは、平均点からの距離を表している」のです。そのため2乗するわけです。
f:id:Yaju3D:20160228160455j:plain

機械学習を学ぶ時に2乗誤差が出てきます。2乗なら簡単に微分できるのですが、絶対値の微分は面倒だったりします。その点でも2乗するのは利点があります。

次に進みます。
\displaystyle {1 \over n} \sum_{i=1}^n(x_i - \bar{x})^2
これは単純ですね。先ほど求めた2乗の総和の平均を求めるためです。
この平均からの偏差を二乗したものを足し合わせて平均を取ったものを「分散」と言います。
分散は、  970 / 7 = 138.571428

最後の標準偏差の数式に戻りました。
\sigma = \sqrt{\displaystyle {1 \over n} \sum_{i=1}^n(x_i - \bar{x})^2 }
分散で求めた値をルートした結果が標準偏差となります。
ちなみに、ルート √ は二乗したらその値になるという定義で、\sqrt{25}=5 となります。
標準偏差は、 \sqrt{138.571428} = 11.771636
Excelにて標準偏差関数(STDEVP)を使って求めた場合、11.77164となりました。

ついでに学力を測定する値として「偏差値」ということばをよく耳にしますが、偏差値は標準偏差を分母に使った下記の数式となります。
\Large T_i = \displaystyle {10(x_i - \bar{x}) \over \sigma} + 50

参照:偏差値の求め方 - すぐる学習会

Σ(シグマ)の実習

Σ(シグマ)の数式に変換するのに、内積が丁度いい題材としてあります。
3次元のベクトルの内積を取る計算は下記のようになります。
\vec{a}=(a_1,a_2,a_3),\vec{b}=(b_1,b_2,b_3)
\vec{a} \cdot \vec{b} = a_1b_1 + a_2b_2 + a_3b_3

\vec{a}\cdot\vec{b} = \displaystyle \sum_{k=1}^{3}a_{ik}b_{ik}

内積では1行だけなので、複数行にした行列の積の場合
\begin{pmatrix}
a_{11} & \ldots & a_{1n} \\
\vdots & \ldots & \vdots \\
a_{n1} & \ldots & a_{nn} \\
\end{pmatrix}
\begin{pmatrix}
b_{11} & \ldots & b_{1n} \\
\vdots & \ldots & \vdots \\
b_{n1} & \ldots & b_{nn} \\
\end{pmatrix} =
\begin{pmatrix}
\sum_{i}a_{1i}b_{i1} & \ldots & \sum_{i}a_{1i}b_{in} \\
\vdots & \ldots & \vdots \\
\sum_{i}a_{ni}b_{i1} & \ldots & \sum_{i}a_{ni}b_{in} \\
\end{pmatrix}

(ab)_ij = \displaystyle \sum_{k=1}^{n}a_{ik}b_{kj}
これをプログラムで書くと下記になります。※数式と違いk=1ではなくk=0にしています。

for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) {
      c[i][j] = 0;
      for (k = 0; k < n; k++) {
	c[i][j] += a[i][k] * b[k][j];
      }
    }
}

Σ(シグマ)の二重和

Σ(シグマ)を2つ繋げて書く方法があります。参照:シグマ計算を機械的に行うための3つの公式
シグマが2つ並んだ場合,内側のシグマから順番に計算します
\displaystyle \sum_{i=1}^{m}\sum_{j=1}^{n}a_{ij}
 = \displaystyle \sum_{i=1}^{m}(\Large a_1+a_2+a_3+\cdots+a_n)
 = \Large a_{ij} のすべての和

これの用途ですが、画像フィルタなどに使われています。
線形フィルタ(Linear filter)は M行xN列 の近傍マトリックス、及び同じサイズの係数マトリックスで積和演算を行い注目画素の画素値を変換するフィルタのことです。
g(i,j) = \displaystyle \sum_{n=-w}^{w}\sum_{m=-w}^{w}f(i + m, j + n)h(m,n)
参照:フィルタ処理の概要


f:id:Yaju3D:20160417025404g:plain

スポンサーリンク