定義
バージョン8.2の新機能。
値のウィンドウ内で数値式を正規化します。デフォルトでは 、値は 0 から 1 の範囲で指定できます。最小値は 0、最大値は 1 になり、その他すべての値は 0 から 1 の間で比例的に増やす。正規化された出力範囲のカスタム最小値と最大値を指定することもできます。
$minMaxScaler is only available in the $setWindowFields stage.
$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
以下の条件に一致するもの。
| 正規化する値。 |
| 出力の必要な最小値。 |
| 必要な出力の最大値。 |
| 範囲内の最小値。 |
| 範囲内の最大値。 |
The $minMaxScaler returns an error if the input value is any of the following:
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}
In the preceding example, the pipeline uses the $minMaxScaler to calculate two scaled values:
scaledは、を増やすためにデフォルト値である0と1を適用します。scaledTo100は、 を増やすするために0と100の間の範囲を適用します。
The output shows the original value of a and the two scaled values. The $minMaxScaler uses the following for the documents, where min(X) is 1 and max(X) is 21 (calculated from the documents), to return the scaled values:
scaled = ((1 - 1) / (21 - 1)) * (1 - 0) + 0 = 0 scaledTo100 = ((1 - 1) / (21 - 1)) * (100 - 0) + 0 = 0
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
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
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