1. Qiita
  2. 投稿
  3. 数式

数式とプログラミングの関係

  • 21
    いいね
  • 0
    コメント

はじめに

機械学習や深層学習を勉強するときに,様々な数式が出てきます.
「数式じゃわからなんよ?プログラムでよろ」みたいな人向けの記事(?)になってます.
ひとまず,基本統計量の数式とそれに対応したサンプルソースコード(C++)を貼ってありますので参考にどうぞ.

基本統計量

データのばらつき具合を表現するには,総和・平均・分散・標準偏差あたりでしょう.
あとは,中央値,最頻値,正規化あたりを知っていればなんとかなる…はず

総和 / Summation

S=\sum_{i=1}^{N}x_i
int S=0;
for(int i=0 ; i<N ; i++) {
 S+=x[i];
}

平均 / Average, Mean

\bar{X}=\frac{1}{N}\sum_{i=1}^{N}x_i
int S=0;
for(int i=0 ; i<N ; i++) {
 S+=x[i];
}
int ave = S / N;

分散 / Variance

プログラムに落とし込む前に数式を変形させて処理を軽くする.
以下の数式の変形は,結果的に「2乗の平均値と平均値の2乗との差」という意味になる.

\begin{align}
Var&=\frac{1}{N}\sum_{i=1}^{N}(x_i-\bar{x})^2\\
&=\frac{1}{N}\sum_{i=1}^{N}(x_i^2-2x_i\bar{x}+\bar{x}^2)\\
&=\frac{1}{N}\sum_{i=1}^{N}x_i^2-\frac{2}{N}\sum_{i=1}^{N}x_i\bar{x}+\frac{1}{N}\sum_{i=1}^{N}\bar{x}^2\\
&=\frac{1}{N}\sum_{i=1}^{N}x_i^2-2\bar{x}\frac{1}{N}\sum_{i=1}^{N}x_i+\bar{x}^2\\
&=\frac{1}{N}\sum_{i=1}^{N}x_i^2-2\bar{x}^2+\bar{x}^2\\
&=\frac{1}{N}\sum_{i=1}^{N}x_i^2-\bar{x}^2\\
\end{align}
int a=0; // 第一項の方(2乗の平均)
int b=0; // 第二項の方(平均の2乗)
for(int i=0 ; i<N ; i++) {
 a+=x[i]*x[i];
 b+=x[i];
}
b /= N;
int Var = a / N + b * b;

標準偏差 / Standard Deviation

標準偏差は分散値に平方根をつけたやつなので割愛

\begin{align}
Std &=\sqrt{Var}\\
&=\sqrt{\sum_{i=1}^{N}(x_i-\bar{x})^2}
\end{align}

中央値 / Median

データの集まりの中で値が真ん中に位置するデータのこと.
ソートして,配列の半分のところの値を取ったとき,それが中央値となる.

std::sort(x, x+N); // ソート

int median = x[N/2]; // 中央値

最頻値 / Mode

最頻値とは,データの集まりの中で一番多く出てくる値のこと.
ヒストグラムにすると一番高いビンの値となる.

正規化 / Normalization

正規化とは,データから尺度(cmとかkgとか)を排除して,複数のデータを比較するために使うもの.
データのばらつき具合・偏り具合をなくすイメージです.

最後に

今回は基本統計量について書きました.
微積分や,線形代数,調和関数(Laplace方程式やPoisson方程式)なんかも今後書いていく予定です.

参考記事
数式を書くのに参考にさせていただきました!
http://qiita.com/PlanetMeron/items/63ac58898541cbe81ada