私はノーマライズに迷っています。誰でも私を案内してくれますか。
最小値と最大値、それぞれ-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'に線形的に再スケーリングする一般的な1行の式は次のとおりです。
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
非正規化は次の式を使用します。
心に留めておくべきことの1つは、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]
normalize([12, 20, 10])
出力[0.2, 1.0, 0.0]
。これは、と同じです(val - min) / (max - min)
。
答えは正しいですが、提案があります。あなたのトレーニングデータが範囲外の数に直面したらどうなりますか?スカッシュテクニックを使用できます。決して範囲外に出ないことが保証されます。これよりも
これを使うことをお勧めします
範囲の最小値と最大値でこのようなつぶしで
予想される範囲外のギャップのサイズは、範囲外の値が存在するという信頼度に直接比例します。
詳細については、グーグルで検索できます。範囲外の番号を削除し、「ドリアンパイル」のデータ準備書を参照してください
これを試して。機能スケールと一致しています
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)
}