Saya tersesat dalam normalisasi, dapatkah seseorang membimbing saya?
Saya memiliki nilai minimum dan maksimum, masing-masing -23,89 dan 7,54990767.
Jika saya mendapatkan nilai 5,6878 bagaimana saya bisa skala nilai ini pada skala 0 hingga 1.
Saya tersesat dalam normalisasi, dapatkah seseorang membimbing saya?
Saya memiliki nilai minimum dan maksimum, masing-masing -23,89 dan 7,54990767.
Jika saya mendapatkan nilai 5,6878 bagaimana saya bisa skala nilai ini pada skala 0 hingga 1.
Jawaban:
Jika Anda ingin menormalkan data Anda, Anda dapat melakukannya seperti yang Anda sarankan dan hanya menghitung yang berikut ini:
di mana dan sekarang adalah data normalisasi . Sebagai bukti konsep (walaupun Anda tidak memintanya) berikut adalah beberapa kode dan grafik yang menyertai untuk menggambarkan hal ini: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
jawaban Anda (benar)?
Rumus satu baris umum untuk secara linier menskala ulang nilai data setelah mengamati min dan maks ke dalam kisaran arbitrer baru min ' to max' adalah
newvalue= (max'-min')/(max-min)*(value-max)+max'
or
newvalue= (max'-min')/(max-min)*(value-min)+min'.
a
dan b
konstanta, dan kemudian hanya berlaku newvalue = a * value + b
. a = (max'-min')/(max-min)
danb = max - a * max
b = max' - a * max
Ataub = min' - (a * min)
u = -1 + 2.*(u - min(u))./(max(u) - min(u));
.
Berikut ini adalah implementasi PHP saya untuk normalisasi:
function normalize($value, $min, $max) {
$normalized = ($value - $min) / ($max - $min);
return $normalized;
}
Tetapi ketika saya sedang membangun jaringan syaraf tiruan saya sendiri, saya perlu mengubah output yang dinormalisasi kembali ke data asli untuk mendapatkan output yang baik untuk grafik.
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
Denormalisasi menggunakan rumus berikut:
Satu hal yang perlu diingat adalah bahwa max - min
bisa sama dengan nol. Dalam hal ini, Anda tidak ingin melakukan divisi itu.
Kasus di mana ini akan terjadi adalah ketika semua nilai dalam daftar yang Anda coba normalkan adalah sama. Untuk menormalkan daftar tersebut, setiap item akan menjadi 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])
output [0.2, 1.0, 0.0]
, yang sama dengan yang Anda dapatkan (val - min) / (max - min)
.
jawabannya benar tetapi saya punya saran, bagaimana jika data pelatihan Anda menghadapi beberapa angka di luar jangkauan? Anda bisa menggunakan teknik squashing. dijamin tidak akan keluar dari jangkauan. daripada ini
Saya sarankan gunakan ini
dengan squashing seperti ini di min dan max range
dan ukuran kesenjangan out-of-range yang diharapkan berbanding lurus dengan tingkat kepercayaan bahwa akan ada nilai out-of-range.
untuk informasi lebih lanjut Anda dapat google: menekan angka out-of-range dan merujuk ke buku persiapan data "dorian pyle"
Coba ini. Ini konsisten dengan skala fungsi
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)
}