2019年6月2日日曜日

[Python] 期待値と分散

Pythonでは,確率分布からデータを生成するための関数 np.randomscipy.stats として提供されています.
サンプルの生成で使うのは,以下のような関数です.

正規分布
  • np.random.normal(loc = 0.0, scale = 1.0, size = None)
オプションのlocは期待値,scaleは標準偏差,sizeはサンプル数

標準正規分布
  • np.random.randn(d0, d1, d2, ...)
標準正規分布は,期待値0, 分散1の正規分布.(d0, d1, d2, ...) のサイズの配列に,標準正規分布からのサンプルを格納

一様分布
  • np.random.uniform(low = 0.0, high = 1.0, size = None)
オプションのlowは最小値,highは最大値,sizeはサンプル数

区間[0, 1]上の一様分布
  • np.random.rand(d0, d1, d2, ...)
(d0, d1, d2, ...) のサイズの配列に,区間[0, 1]上の一様分布からのサンプルを格納

Pythonでの実装は以下のようになります.
期待値1,標準偏差2の正規分布に従うデータを100個生成してみます.
>>> import numpy as np
>>> x = np.random.normal(1, 2, 100)

データの平均値を計算します.
>>> x.mean()
1.150042657481204

別の方法でデータの平均値を計算するには以下のようにします.
>>> np.mean(x)
1.150042657481204
当然,同じ値が得られます.

$| x - E[x] | \leq sd(x)$となるデータの割合を求めます.
>>> np.mean(np.abs(x - np.mean(x)) <= np.std(x))
0.67

$| x - E[x] | \leq 2 \times sd(x) $となるデータの割合を求めます.
>>> np.mean(np.abs(x - np.mean(x)) <= 2 * np.std(x))
0.98


上記の例のJupyter Notebookファイルは,GitHubStatistics.ipynbの"Expected value and Variance"で見ることができます.

0 件のコメント :

コメントを投稿