今回は、分散を求める関数であるnp.var()
関数について解説します。まずは簡単な分散の復習から入りましょう。
分散
分散というのは一般的にデータのばらつき度合いを示すために使われる指標です。平均との偏差の2乗を平均したものが分散になります。式で表すと以下のようになります。
求める分散の値をとすると、
ここではの平均値を表しています。このの平方根をとったものが標準偏差です。
標準偏差が使われるのは、もととなるデータにおける単位を揃えるためです。分散のままだと単位はもとのデータの単位をそれぞれ2乗したものになってしまいます。
式を見てもらえばわかるように、平均からデータがどれくらい離れているのか、その平均をとることによって分散という指標はできています。
あくまで散らばり具合の基準点は平均となります。
np.var関数
では実際に関数の使い方を見ていきましょう。
APIドキュメント
まずはAPIドキュメントをみます。この関数のAPIドキュメントは以下の通りです。
**numpy.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=, ..., where=)**
params:
パラメータ名 |
型 |
概要 |
a |
配列に相当するもの |
分散を求めたい配列を指定します。ndarrayでなかった場合変換が試みられます。 |
axis |
Noneもしくはint もしくはintのタプル |
(省略可能)初期値None どの軸(axis)に沿って分散を計算するかを指定します。Noneの場合、すべてのデータを対象に分散を求めます。 |
dtype |
データ型 |
(省略可能)初期値None 分散を計算する際に用いるデータ型を指定します。デフォルトでは入力された配列が整数型の場合float32 が指定され、それ以外の場合、aで指定された配列のデータ型に従います。 |
out |
ndarray |
(省略可能)初期値None 結果を格納する配列をここで指定します。 |
ddof |
int |
(省略可能)初期値0 分散を計算する際、平均との偏差の2乗の和をN-ddof で割ります。初期値ではddof=0なのでデータ数であるN で割ることになります。 |
keepdims |
bool値 |
(省略可能)初期値no value 計算の結果、次元を縮小できる場合でも縮小可能な軸をサイズ1として維持します。 |
where |
array_like of bool値 |
(省略可能)標準偏差の計算に含める要素かどうかを指定します |
returns:
outに何も指定されていない場合、求めた分散を格納した配列が返されます。
指定されている場合は出力された配列への参照が返されます。
指定できる引数が数多くあります。最初に分散を求めたい配列を指定します。axis
で分散を計算する方向を指定します。axis
については以下の記事で詳しく解説しているので気になる方は見てみてください。
dtype
で計算する際に用いるデータ型を指定し、out
で結果を格納する配列を指定します。
ddof
で分散を求める際にddof=0
であれば、与えられたデータを集合全体と見てその分散を求める標本分散をddof=1
ならば一部のデータから全体のデータの分散を計算する不偏分散を求めます。
NumPyの軸(axis)と次元数(ndim)は何を意味するのか /features/numpy-axis.html
標本分散と不偏分散については以下のサイトで詳しく解説されているので参考にしてみてください。
18-4. 標本分散と不偏分散
分散を求める
では、実際に使っていきましょう。特に引数を指定せずにデータ全体の分散を求めてみます。
次にaxis
を指定してみます。
次にdtype
を指定します。
ddofを指定する
次にddof
を変更してみます。先程の標準正規分布から生成した配列のサンプルデータ数を少なくして分散がddof=0,ddof=1
のどちらの場合のほうが、分散がより1に近づくか見てみましょう。
サンプル数を少なくするほど母集団の分散を計算できていることがわかります。
配列の次元数を保存する
最後はkeepdims
です。keepdimをTrueにすることでブロードキャストを適用します。例えば計算した分散の値でもとのデータを割りたいときにはkeepdims=True
にすると安全です。
参考
・numpy.var — NumPy v1.13 Manual