我迷失在正常化中,谁能指导我。
我有一个最小值和最大值,分别是 -23.89 和 7.54990767。
如果我得到一个 5.6878 的值,我如何在 0 到 1 的范围内缩放这个值。
我迷失在正常化中,谁能指导我。
我有一个最小值和最大值,分别是 -23.89 和 7.54990767。
如果我得到一个 5.6878 的值,我如何在 0 到 1 的范围内缩放这个值。
如果您想标准化您的数据,您可以按照您的建议进行操作,并简单地计算以下内容:
其中和现在是您的标准化数据。作为概念证明(尽管您没有要求),这里有一些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="")
将观察到的min和max的数据值线性重新缩放到新的任意范围min'到max'的一般单行公式是
newvalue= (max'-min')/(max-min)*(value-max)+max'
or
newvalue= (max'-min')/(max-min)*(value-min)+min'.
这是我的规范化 PHP 实现:
function normalize($value, $min, $max) {
$normalized = ($value - $min) / ($max - $min);
return $normalized;
}
但是,当我在构建自己的人工神经网络时,我需要将归一化的输出转换回原始数据,以获得图形的良好可读输出。
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
非规范化使用以下公式:
要记住的一件事是它max - min
可能等于零。在这种情况下,您不希望执行该除法。
发生这种情况的情况是当您尝试规范化的列表中的所有值都相同时。为了规范化这样一个列表,每个项目都是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]