-1 ile 1 arasındaki veriler nasıl normalleştirilir?


36

Min-max normalizasyon formülünü gördüm ama bu değerleri 0 ile 1 arasında normalleştirir. Verilerimi -1 ile 1 arasında nasıl normalleştiririm? Veri matrisimde hem negatif hem de pozitif değerler var.


1
R'de çalışıyorsanız, birkaç seçenek için bu konuya bakın . Özellikle, kabul edilen cevaba yapılan bir yorum, 'newMax' değerini 1 ve 'newMin' değerini -1 olarak ayarladığınız ve işlevi verileriniz üzerinde çalıştıran bu işleve sahiptir
mtreg

Vikipedi'de referansı şu şekilde bulabilirsiniz: en.wikipedia.org/wiki/Normalization_(statistics)
salem

Javascript örneği, buradan alınmıştır . convertRange işlevi (değer, r1, r2) {return (değer - r1 [0]) * (r2 [1] - r2 [0]) / (r1 [1] - r1 [0]) + r2 [0]; } convertRange (328.17, [300.77, 559.22], [1, 10]); >>> 1.9541497388276272
Giuseppe Canale

1
@covfefe, hala etrafınızdaysa, cevaplardan birini kabul etmek isteyebilirsiniz
Simone

Yanıtlar:


97

İle: bulunduğunuz özelliğin normalleştirmekxiçinde[0,1].

x=xminxmaxxminx
x[0,1]

içinde normalleştirmek için kullanabilirsiniz:[1,1]

x"=2x-minxmaksimumx-minx-1

Genel olarak, her zaman yeni bir değişken alabilirsiniz içinde [ a , b ] :x[bir,b]

x=(ba)xminxmaxxminx+a

15
Dürüst olmak gerekirse, bunun için alıntı yok. Bu sadece rastgele bir değişkenin doğrusal bir dönüşümüdür. Doğrusal dönüşümlerin rastgele değişkenin desteği üzerindeki etkisine bir göz atın.
Simone

-1

Rasgele oluşturulmuş veriler üzerinde test ettim ve

Xout=(ba)XinminXinmaxXinminXin+a

dağıtım şeklini korumaz. Rastgele değişkenlerin fonksiyonlarını kullanarak bunun doğru türetilmesini gerçekten görmek isterdim.

Benim için şekli koruyan yaklaşım kullanıyordu:

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

nerede

σout=ba6

(6'yı kullanmanın biraz kirli olduğunu kabul ediyorum ) ve

μOut=b+bir2

ve

birbbir=-1 ve b=1.

Bu akıl yürütmenin sonucuna geldim

ZOut=Zbenn

XOut-μOutσOut=Xbenn-μbennσbenn


3
Bunun dönüştürülen verilerin sınırlar içinde kalmasını garanti ettiğinden emin misiniz? Ar şunları yapabilirsiniz: set.seed(1); scale(rnorm(1000))*.333. En fazla alacağım 1.230871. Metodunuz, verileri istendiği gibi normalleştirmek yerine, verileri standart hale getirme konusunda çok ince görünüyor. Sorunun dağılımın şeklini koruyan bir yöntem istemediğine dikkat edin (bu normalleştirme için garip bir gerekliliktir).
dediklerinin - Eski Monica

3
Orijinal dönüşümün verilerin şeklini nasıl koruyamadığından emin olamadım. Bir sabiti çıkartıp ardından bir sabite bölmekle eşdeğerdir, bu da teklifinizin yaptığı ve verilerin şeklini değiştirmeyen şeydir. Teklifiniz, tüm verilerin ortalamanın üç standart sapmasına düştüğünü, bunun da küçük, yaklaşık olarak normal dağılıma sahip örneklerle biraz makul olabileceğini, ancak büyük olan veya normal olmayan örneklerle olabileceğini varsayar.
Noah,

1
@Hayır Sabit değerlerle çıkarma ve bölmeye eşdeğer değildir , çünkü verilerin minimum ve maksimum değerleri rasgele değişkenlerdir. Aslında, çoğu temel dağıtım için bunlar oldukça değişkendir - verilerin geri kalanından daha değişkendir - bu nedenle onları herhangi bir standardizasyon için kullanmak genellikle iyi bir fikir değildir. Bu cevapta ne olduğu belli değilbir ve bortalama veya verilerle nasıl ilişkili olabileceği.
whuber

2
@whuber true, ancak belirli bir veri kümesinde (yani, verileri sabit olarak işleme koyma), sabit oldukları anlamına gelir, aynı şekilde bir veri kümesini standartlaştırırken, örnek ortalama ve örnek standart sapma fonksiyonu sabitleridir. Benim izlenimim, OP'nin bir veri setini normalleştirmek istediği, bir dağılım değil.
Nuh

@Hayır, aynı izlenime sahiptim, ancak şimdiki postanın farklı bir yorumlara cevap verebileceğine inanıyorum.
whuber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.