İşaretli tam sayı dizisini 0 ile 1 arasında nasıl ölçeklendirebilirim?


Yanıtlar:


24

Buna birlik temelli normalleşme denir. Bir vektörünüz Xvarsa, bunu yaparak normalleştirilmiş bir sürümünü ( gibi) elde edebilirsiniz Z:

Z=X-min(X)maksimum(X)-min(X)

1
Bu yaklaşım aynı zamanda min-maks normalizasyon olarak da bilinir (min ve maks değerleri kullandığımız için)
Shagun Sodhani

Yüzdeyi temsil eden ve negatif ancak her zaman% -2'den yüksek ve% 30'dan düşük bir değeri normalleştirmek için bu yöntemi kullanmak uygun mudur? Bir sinir ağının bu şekilde normalleştirirsem değer anlamının ipucunu alması zor olmayacak mı?
Ivan

3

Dizideki en büyük pozitif sayıyı ve en küçük (en negatif) sayıyı bulun. Dizideki her değere en küçük (en negatif) sayının mutlak değerini ekleyin. Her bir sonucu, en büyük ve en küçük sayı arasındaki farka bölün.


@Jonathan: Her iki değer de aynı diziden, orijinal veya güncellenmiş olduğu sürece önemli değildir. Her değere aynı sayı eklendiğinden, minimum ve maksimum arasındaki fark aynı kalır.
RemcoGerlich

1

bir vektörünüz / değerler diziniz olduğunu varsayalım 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 );}

Sonunda çıktı olacak v = [0.6, 0, 1]. Açıklama:

  1. Negatif olmamak için tüm değer aralığını 0'dan başlamak için itmek

  2. Değerleri (max - min) aralığına böler, böylece max 1 olur


1

Bunu yapmadan önce aykırı değerleri kontrol etmek isteyebilirsiniz. Diyelim ki verilerin% 99'u menzil içinde (-5, 5), ancak küçük bir adam 25.0 değerini alıyor. Normalleştirilmiş diziniz (0, 0.3) etrafında kümelenir ve bu, sinir ağının öğrenmesi için soruna neden olur.

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.