
データの正規化についてお聞きしたいことがあります。
標準化(平均0,標準偏差:1)をしつ、正規化(ex,値を-1から1)することはできるのでしょうか。
つまり最終的に得たいものは、値が-1から1で平均0、標準偏差1となるようなものです。
以下が自分になりに実験してみた結果です。標準化->正規化をしたのですが、最終的に得られた配列の平均は0になりましたが、標準偏差は1にはなりませんでした。
よろしくお願いいたします。
python
1import numpy as np 2 3a = np.array([1,134,234,1,13,133,124,12,4365,235,345,-100]) 4print("元の配列:",a) 5 6avg = np.average(a) 7print("平均:",avg) 8 9 10sigma = np.std(a) 11print("標準偏差:",sigma) 12 13print("---------------") 14x_s = (a-avg) / sigma 15print("標準化:",x_s) 16print("平均:",np.average(x_s)) #平均: -9.25185853854297e-18 17print("標準偏差:",np.std(x_s)) #標準偏差: 0.9999999999999999 18max = np.max(np.abs(x_s)) 19print("最大値(絶対値):",max) 20 21 22print("--------------") 23 24x_d = x_s / max 25print("正規化:",x_d) 26print("平均:",np.average(x_d)) #平均: -4.625929269271485e-18 27print("標準偏差:",np.std(x_d)) #標準偏差: 0.3030811999388321

正規化をしながら標準化をする目的は何ですか?
知的好奇心で、なのか、プログラム上必須で、なのかで答え方が変わると思います。
機械学習で、tanh関数を出力として使いたいからです。正規化のみで学習させてみたのですが、思ったよりも精度が悪かったので.....
知的好奇心と必須の両方があります。

ちゃんとした答えではないのでコメント欄に書きます。
標準化は幅を定義する代わりにばらつきを制御します。
正規化はばらつきを定義する代わりに幅を制御します。
片方を合わせると片方が満たせなくなります。藪に入りそうな感じがします。
> 機械学習で、tanh関数を出力として使いたいからです。
> 正規化のみで学習させてみたのですが、思ったよりも精度が悪かったので.....
どのような機械学習を使うのかわかりませんが、ハイパーパラメータを調整すれば何とかなりそうな気がします。
質問を追加するか、この質問を変えるとよりうまくいきやすくなるように思います。
