-1と1の間のデータを正規化する方法は?


36

min-max正規化公式を見ましたが、0〜1の値を正規化します。-1〜1のデータを正規化するにはどうすればよいですか。データマトリックスに負の値と正の値の両方があります。


1
Rで作業している場合は、いくつかのオプションについてこのスレッドを参照してください。具体的には、受け入れ答えにコメントを使用すると、1に「newMax」を設定し、この機能を持っていると「newMin」に-1し、データ上で機能を実行する
mtreg

次のようにウィキペディアで参照を見つけることができます:en.wikipedia.org/wiki/Normalization_(statistics)
セーラム

ここから取られたJavascriptの例。function convertRange(value、r1、r2){return(value-r1 [0])*(r2 [1]-r2 [0])/(r1 [1]-r1 [0])+ r2 [0]; } convertRange(328.17、[300.77、559.22]、[1、10]); >>> 1.9541497388276272
ジュゼッペ・カナーレ

1
@covfefeあなたがまだ残っている場合は、答えの一つ受け入れることをお勧めします
シモーネ

回答:


97

: あなたの機能正常化X[0,1]

x=xminxmaxxminx
x[0,1]

[-1,1]で正規化するには、[1,1]次を使用できます。

x=2xminxmaxxminx1

一般的に、[a、b]で常に新しい変数xを取得できます。[a,b]

x=(ba)xminxmaxxminx+a

15
正直なところ、これに対する引用はありません。これは、ランダム変数の単なる線形変換です。ランダム変数のサポートに対する線形変換の効果をご覧ください。
シモーネ

-1

ランダムに生成されたデータでテストし、

Xout=(ba)XinminXinmaxXinminXin+a

分布の形状を保持しません。ランダム変数の関数を使用して、これが適切に派生するのを本当に見たいです。

私のために形状を保存したアプローチは次を使用していました:

Xout=Xinμinσinσout+μout

どこで

σout=ba6

(私は6を使用すると少し汚いことを認めます)

μout=b+a2

そして

aおよびは希望の範囲です。したがって、元の質問ごとにおよびます。ba=1b=1

この推論の結果にたどり着きました

Zout=Zin

Xoutμoutσout=Xinμinσin


3
これにより、変換されたデータが境界内に収まることが保証されますか?Rでは、次を試してくださいset.seed(1); scale(rnorm(1000))*.333。私は最大を取得し1.230871ます。あなたの方法は、要求に応じてデータを正規化するのではなく、単にデータを標準化するための微調整のようです。質問では、分布の形状を保持する方法を求めていないことに注意してください(正規化の奇妙な要件です)。
gung-モニカの復職

3
元の変換がデータの形状の保持にどのように失敗するかはわかりません。これは、定数を減算してから定数で除算することと同等です。これは、提案の目的であり、データの形状を変更しません。提案では、すべてのデータが平均の3つの標準偏差内に収まることを前提としています。これは、小さな、ほぼ正規分布のサンプルではある程度妥当ですが、大きなサンプルや非正規サンプルではそうではありません。
ノア

1
@Noah データの最小値と最大値はランダム変数であるため、定数による減算や除算と同等ではありません 実際、ほとんどの基礎となる分布では、それらはかなり可変的であり、他のデータよりも可変性が高いため、通常、あらゆる形式の標準化に使用することは良い考えではありません。この回答で、と何を意味するのか、またはそれらがデータにどのように関連するのか不明です。ab
whuber

2
@whuber trueですが、特定のデータセット(つまり、データを固定として扱う)では、データセットを標準化するときのサンプル平均とサンプル標準偏差が定数として機能するように、それらは定数です。私の印象では、OPは分布ではなくデータセットを正規化したいと考えていました。
ノア

@ノア私は同じ印象を持っていましたが、現在の投稿は異なる解釈に反応していると思います。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.