Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$minMaxScaler (Función de ventana) (operador de expresión)

Nuevo en la versión 8.2.

$minMaxScaler

Normaliza una expresión numérica dentro de una ventana de valores. Por defecto, los valores pueden oscilar entre cero y uno. El valor más pequeño se convierte en cero, el valor más grande se convierte en uno, y todos los demás valores se escalan proporcionalmente entre cero y uno. También puedes especificar un valor mínimo y máximo personalizado para el rango de salida normalizado.

$minMaxScaler solo está disponible en el $setWindowFields etapa.

$minMaxScaler el operador de ventana tiene la siguiente sintaxis:

{ $minMaxScaler: <numeric expression> }

El valor puede ser:

  • Una expresión numérica, que es el valor que desea normalizar. Puede ser un campo numérico específico o un valor calculado a partir de tus documentos.

  • Un documento en el siguiente formato:

    {
    input: <numeric expression>,
    min: <constant numeric expression>,
    max: <constant numeric expression>
    }
    Campo
    Descripción

    input

    Expresión numérica que contiene el valor que deseas normalizar.

    min

    Valor mínimo que se desea en la salida. Si se omite, por defecto es 0.

    max

    Valor máximo que quieres obtener en el resultado. Si se omite, el valor por defecto es 1.

$minMaxScaler utiliza la siguiente fórmula para normalizar la expresión numérica:

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

Dónde:

x

Valor a normalizar.

min

Valor mínimo deseado de outputs.

max

Valor máximo deseado de los resultados.

min(X)

Valor mínimo en el rango.

max(X)

Valor máximo en el rango.

El $minMaxScaler devuelve un error si el valor input es cualquiera de los siguientes:

  • Non-numeric

  • Nulo

  • Arreglos vacíos

  • Strings

Suponga que sus documentos en la colección tienen un campo llamado a con los siguientes valores:

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

Considera la siguiente etapa del pipeline y sus resultados:

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}

En el ejemplo anterior, el pipeline utiliza el $minMaxScaler para calcular dos valores escalados:

  • scaledque aplica los valores por defecto, 0 y 1, a escala.

  • scaledTo100, que aplica un rango entre 0 y 100 para escalar.

La salida muestra el valor original de a y los dos valores escalados. El $minMaxScaler utiliza lo siguiente para los documentos, donde min(X) es 1 y max(X) es 21 (calculado a partir de los documentos), para devolver los valores escalados:

{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

Volver

$minN-array-element

En esta página