Docs Menu
Docs Home
/
データベース マニュアル
/ / /

$minMaxScaler(ウィンドウ関数)

バージョン8.2の新機能

$minMaxScaler

値のウィンドウ内で数値式を正規化します。デフォルトでは 、値は 0 から 1 の範囲で指定できます。最小値は 0、最大値は 1 になり、その他すべての値は 0 から 1 の間で比例的に増やす。正規化された出力範囲のカスタム最小値と最大値を指定することもできます。

$minMaxScaler$setWindowFields ステージでのみ使用できます。

$minMaxScaler ウィンドウオペレーターの構文は次のとおりです。

{ $minMaxScaler: <numeric expression> }

値は次のとおりです。

  • 正規化する値である数値式。ドキュメントから計算された特定の数値フィールドまたは値を指定できます。

  • 次の形式のドキュメント:

    {
    input: <numeric expression>,
    min: <constant numeric expression>,
    max: <constant numeric expression>
    }
    フィールド
    説明

    input

    正規化する値を含む数値式。

    min

    出力に含める最小値。省略した場合、デフォルトは 0 になります。

    max

    出力に含める最大値。省略した場合、デフォルトは 1 になります。

$minMaxScaler は、次の式を使用して数値式を正規化します。

minMaxScaler(x, min, max) = ((x - min(X)) / (max(X) - min(X))) * (max - min) + min

以下の条件に一致するもの。

x

正規化する値。

min

出力の必要な最小値。

max

必要な出力の最大値。

min(X)

範囲内の最小値。

max(X)

範囲内の最大値。

$minMaxScalerinputの値が次のいずれかの場合、 はエラーを返します。

  • Non-numeric

  • null

  • 空の配列

  • 文字列

コレクション内のドキュメントには、次の値を持つ a という名前のフィールドがあるとします。

{ "_id": 1, "a": 1 }
{ "_id": 2, "a": 5 }
{ "_id": 3, "a": 13 }
{ "_id": 4, "a": 21 }

次のパイプラインステージと 出力について考えてみましょう。

db.example.aggregate([
{$setWindowFields: {
sortBy: {a: 1},
output: {
scaled: {$minMaxScaler: "$a"},
scaledTo100: {$minMaxScaler: {input: "$a", min: 0, max: 100}},
}
}}
])
{a: 1, scaled: 0, scaledTo100: 0}
{a: 5, scaled: 0.2, scaledTo100: 20}
{a: 13, scaled: 0.6, scaledTo100: 60}
{a: 21, scaled: 1, scaledTo100: 100}

前の例では、パイプラインは$minMaxScaler を使用して 2 つのスケーリングされた値を計算します。

  • scaledは、を増やすためにデフォルト値である 01 を適用します。

  • scaledTo100は、 を増やすするために 0100 の間の範囲を適用します。

出力には、a の元の値と 2 つのスケーリングされた値が表示されます。$minMaxScaler は、ドキュメントに対して次の を使用します。ここでは、min(X)1max(X)21(ドキュメントから計算)で、スケーリングされた値を返します。

{a: 1}
scaled = ((1 - 1) / (21 - 1)) * (1 - 0) + 0 = 0
scaledTo100 = ((1 - 1) / (21 - 1)) * (100 - 0) + 0 = 0
{a: 5}
scaled = ((5 - 1) / (21 - 1)) * (1 - 0) + 0 = (4 / 20) * 1 + 0 = 0.2
scaledTo100 = ((5 - 1) / (21 - 1)) * (100 - 0) + 0 = (4 / 20) * 100 + 0 = 20
{a: 13}
scaled = ((13 - 1) / (21 - 1)) * (1 - 0) + 0 = (12 / 20) * 1 + 0 = 0.6
scaledTo100 = ((13 - 1) / (21 - 1)) * (100 - 0) + 0 = (12 / 20) * 100 + 0 = 60
{a: 21}
scaled = ((21 - 1) / (21 - 1)) * (1 - 0) + 0 = (20 / 20) * 1 + 0 = 1
scaledTo100 = ((21 - 1) / (21 - 1)) * (100 - 0) + 0 = (20 / 20) * 100 + 0 = 100

戻る

$minN-array-Element

項目一覧