Normalleşmede kayboldum, biri bana yol gösterebilir mi, lütfen.
Sırasıyla -23.89 ve 7.54990767 gibi minimum ve maksimum değerlere sahibim.
5.6878 değerine sahipsem, bu değeri 0 ile 1 arasında nasıl ölçeklendirebilirim.
Normalleşmede kayboldum, biri bana yol gösterebilir mi, lütfen.
Sırasıyla -23.89 ve 7.54990767 gibi minimum ve maksimum değerlere sahibim.
5.6878 değerine sahipsem, bu değeri 0 ile 1 arasında nasıl ölçeklendirebilirim.
Yanıtlar:
Verilerinizi normalleştirmek istiyorsanız, aşağıdakileri önererek basitçe hesaplayabilirsiniz:
burada ve şimdi sizin normalleştirilmiş verilerinizdir. Konseptin bir kanıtı olarak (siz istemediğiniz halde) bu noktayı açıklamak için bazı kodlar ve beraberinde gelen grafikler:R
# Example Data
x = sample(-100:100, 50)
#Normalized Data
normalized = (x-min(x))/(max(x)-min(x))
# Histogram of example data and normalized data
par(mfrow=c(1,2))
hist(x, breaks=10, xlab="Data", col="lightblue", main="")
hist(normalized, breaks=10, xlab="Normalized Data", col="lightblue", main="")
illustrate the point
(doğru) cevabını nasıl yaptığını merak ediyorum.
Genel bir basit formül doğrusal gözlenen olan veri değerlerini yeniden ölçeklendirmek için min ve max yeni rasgele aralığı içine dakika için maksimum' olduğu
newvalue= (max'-min')/(max-min)*(value-max)+max'
or
newvalue= (max'-min')/(max-min)*(value-min)+min'.
a
, b
sabitler ve sonra sadece uygularsınız newvalue = a * value + b
. a = (max'-min')/(max-min)
veb = max - a * max
b = max' - a * max
ya dab = min' - (a * min)
u = -1 + 2.*(u - min(u))./(max(u) - min(u));
.
İşte benim normalleştirme için PHP uygulaması:
function normalize($value, $min, $max) {
$normalized = ($value - $min) / ($max - $min);
return $normalized;
}
Ancak kendi yapay sinir ağlarımı oluştururken, normalleştirilmiş çıktıyı grafik için iyi okunabilir çıktı elde etmek için orijinal verilere geri dönüştürmem gerekiyordu.
function denormalize($normalized, $min, $max) {
$denormalized = ($normalized * ($max - $min) + $min);
return $denormalized;
}
$int = 12;
$max = 20;
$min = 10;
$normalized = normalize($int, $min, $max); // 0.2
$denormalized = denormalize($normalized, $min, $max); //12
Denormalizasyon aşağıdaki formülü kullanır:
Akılda tutulması gereken bir şey max - min
sıfıra eşit olabilir. Bu durumda, bu bölümü yapmak istemezsiniz.
Bunun olacağı durum, listeyi normalize etmeye çalıştığınız tüm değerler aynı olduğunda. Böyle bir listeyi normalleştirmek için her öğe olacaktır 1 / length
.
// JavaScript
function normalize(list) {
var minMax = list.reduce((acc, value) => {
if (value < acc.min) {
acc.min = value;
}
if (value > acc.max) {
acc.max = value;
}
return acc;
}, {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY});
return list.map(value => {
// Verify that you're not about to divide by zero
if (minMax.max === minMax.min) {
return 1 / list.length
}
var diff = minMax.max - minMax.min;
return (value - minMax.min) / diff;
});
}
normalize([3, 3, 3, 3]); // output => [0.25, 0.25, 0.25, 0.25]
normalize([12, 20, 10])
çıktılar [0.2, 1.0, 0.0]
, ki alacağınız ile aynı (val - min) / (max - min)
.
Cevap doğru ama bir önerim var, ya eğitim verileriniz belirli bir sayı dışında kalıyorsa? ezme tekniğini kullanabilirsiniz. menzil dışına çıkmama garantisi verilecek. bundan ziyade
bunu kullanmanızı öneririm
Min ve maksimum menzil içinde bu gibi ezme ile
ve beklenen aralık dışı aralığın boyutu, aralık dışı değerlerin olacağına dair güven derecesi ile doğru orantılıdır.
Daha fazla bilgi için Google'a başvurabilirsiniz: aralık dışı sayıları ezmek ve "dorian pyle" veri hazırlama kitabına bakınız.
Bunu dene. İşlev ölçeği ile tutarlıdır
normalize <- function(x) {
x <- as.matrix(x)
minAttr=apply(x, 2, min)
maxAttr=apply(x, 2, max)
x <- sweep(x, 2, minAttr, FUN="-")
x=sweep(x, 2, maxAttr-minAttr, "/")
attr(x, 'normalized:min') = minAttr
attr(x, 'normalized:max') = maxAttr
return (x)
}