SciPyでデータの標準化
データの分布が正規分布でなかったり、説明変数の単位が異なったり、値のスケールが違ったりする場合にデータを標準化する必要があります。
標準化とは、個々のデータから元のデータの平均値を引き、元のデータの標準偏差で割ることで平均0、分散1となります。
一括でデータセットを標準化するにはScipyの関数が便利です。
$import scipy as sp
# データセットの読み込み
$score = np.loadtxt('score.txt', skiprows=1)
$X = score$X
array([[ 2., 3., 4., 3., 3., 4., 3., 2., 3., 2.], [ 5., 4., 3., 3., 3., 2., 4., 3., 4., 5.], [ 3., 3., 3., 4., 3., 4., 3., 4., 4., 3.], [ 5., 5., 3., 3., 3., 3., 4., 4., 4., 5.],
...#標準化
$X2 = sp.stats.zscore(X, axis=0)
実際に標準化され、平均0、分散1となっているか確認します。それぞれmean()とvar()を使うと出せます。axis=0で列を計算、axis=1で行を計算します。
#平均
$ X2.mean(axis=0)
array([ -1.88737914e-16, 9.99200722e-17, 5.55111512e-17, -1.11022302e-17, -7.77156117e-17, -1.44328993e-16, -2.22044605e-16, -1.11022302e-16, 1.77635684e-16, 5.55111512e-17])#分散
X2.var(axis=0)
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
...問題ないですね...
参考
はじパタ4章 with Python - Handwriting