ニューラルネットワークをトレーニングするためのデータを平均ゼロと「単位」標準偏差に正規化して、勾配効果の爆発と消失などを減らすのが一般的な方法です。
ここで「unit」標準偏差とはどういう意味ですか?例が非常に役立ちます。
コメント
- 1に等しいことを意味します。値を元のデータの標準偏差で割ると、 。 (ゼロ平均は、平均を差し引くことで得られます。)
回答
データ機能を変換していることを意味します。元の単位(マイル、ドル、経過時間など)から標準偏差の単位まで。リクエストしたとおり、非常に簡単な例を次に示します。
次の架空のデータのように、寝室の数(整数単位)とサイズ(平方メートル単位)の2つの機能から住宅価格を予測するとします。
import numpy as np X = np.array([[1, 65],[3, 130],[2, 80],[2, 70],[1, 50]])
各特徴の平均と標準偏差が大きく異なることに注意してください
print("mean={}, std{}".format(X.mean(axis=0), X.std(axis=0))
出力: mean=[ 1.83333333, 78.33333333]), std=[ 0.68718427, 24.94438258])
フィーチャサイズの平均と標準偏差が寝室の数の30倍を超えていることに気付いたため、一部のアルゴリズム計算(ニューラルネット、svmなど)で歪みが発生します。 、knnなど)、値が大きい一部の機能が、値が小さい他の機能を完全に支配します。これを解決するには、データを平均がゼロの標準偏差の単位に変換することです。つまり、次のように、平均を減算して標準偏差で除算します。
X_t = (X - X.mean(axis=0))/X.std(axis=0)
変数X_t
(X変換)には、平均がゼロの単位標準偏差で特徴が含まれ、X_t
次のようになります:
array([[-1.21267813, -0.53452248], [ 1.69774938, 2.07127462], [ 0.24253563, 0.06681531], [ 0.24253563, -0.33407655], [-1.21267813, -1.13586028], [ 0.24253563, -0.13363062]])
両方の機能の数値がすべて同じ大きさであるかどうかを確認します。 X_t
meanとstdを出力すると、期待どおりに
mean=[ 1.11022302e-16 2.08166817e-16], std=[ 1. 1.]
が得られます。