나는 정상화에서 길을 잃었습니다. 누구든지 나를 안내 할 수 있습니까?
최소값과 최대 값이 각각 -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="")
illustrate the point
(올바른) 대답에 어떻게 작용하는지 궁금합니다 .
min 및 max 를 관찰 한 데이터 값을 새로운 임의 범위 인 min ' 에서 max' 로 선형으로 스케일링하는 일반적인 한 줄 공식 은 다음과 같습니다.
newvalue= (max'-min')/(max-min)*(value-max)+max'
or
newvalue= (max'-min')/(max-min)*(value-min)+min'.
a
하고 b
상수를 적용한 다음 적용하면됩니다 newvalue = a * value + b
. a = (max'-min')/(max-min)
와b = max - a * max
b = max' - a * max
또는b = min' - (a * min)
u = -1 + 2.*(u - min(u))./(max(u) - min(u));
.
정규화를위한 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
0과 같습니다. 이 경우 해당 분할을 수행하지 않을 것입니다.
이런 상황이 발생하는 경우 정규화하려는 목록의 모든 값이 동일한 경우입니다. 이러한 목록을 정규화하기 위해 각 항목은입니다 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])
출력 [0.2, 1.0, 0.0]
과 동일합니다 (val - min) / (max - min)
.
대답은 맞지만 제안 사항이 있습니다. 훈련 데이터가 범위를 벗어난 숫자에 직면하면 어떻게됩니까? 스 쿼싱 기술을 사용할 수 있습니다. 절대 범위를 벗어나지 않아야합니다. 이보다는
나는 이것을 사용하는 것이 좋습니다
최소 및 최대 범위에서 이와 같이 스쿼시
범위를 벗어난 것으로 예상되는 간격의 크기는 범위를 벗어난 값이있을 것이라는 신뢰도에 정비례합니다.
더 많은 정보를 원하시면 google : 범위를 벗어난 숫자를 없애고 "dorian pyle"의 데이터 준비 책을 참조하십시오
이 시도. 기능 스케일 과 일치
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)
}