符号付き整数の配列を0から1の範囲にスケーリングする方法は?


回答:


24

これは、ユニティベースの正規化と呼ばれます。ベクトルがある場合、次のようにして、のような正規化バージョンを取得できます。XZ

Z=Xmin(X)max(X)min(X)

1
このアプローチは、min-max正規化とも呼ばれます(最小値と最大値を使用しているため)
Shagun Sodhani '25年

このメソッドを使用して、パーセンテージを表し、負の値になる可能性があるが、常に-2%より高く、30%未満の値を正規化してもよろしいですか?このように正規化すると、ニューラルネットワークが価値の意味の手がかりを取得するのが難しくなりますか?
Ivan

3

配列内で最大の正の数と最小(最も負)の数を見つけます。配列内のすべての値に最小(最も負)の数値の絶対値を追加します。各結果を最大数と最小数の差で割ります。


@ジョナサン:両方の値が、元のまたは更新された同じ配列からのものである限り、問題ではありません。すべての値に同じ数が追加されるため、最小値と最大値の差は同じままです。
RemcoGerlich

1

値のベクトル/配列があるとしましょう v = [1, -2, 3]

minV = Math.min.apply(Math, v);;
for(var i=0; i<v.length; i++) {v[i] -= minV;}
maxV = Math.max.apply(Math, v);;
for(var i=0; i<v.length; i++) {v[i] /= ( maxV - minV );}

最後の出力はになりますv = [0.6, 0, 1]。説明:

  1. 値の範囲全体を0から開始するようにプッシュして、ネガティブがないようにします。

  2. 値を範囲の(max-min)で除算し、最大値が1になるようにします


1

これを行う前に、外れ値を確認することをお勧めします。データの99%が範囲(-5、5)にあるが、1人の小さな男が25.0の値を取るとします。正規化された配列は(0、0.3)の周りに集まり、ニューラルネットが学習するのに問題が発生します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.