Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
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. De forma predeterminada, los valores pueden oscilar entre cero y uno. El valor más pequeño se convierte en cero, el más grande en uno y todos los demás valores se escalan proporcionalmente entre cero y uno. También puede especificar un valor mínimo y máximo personalizados 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 sus 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 deseado en la salida. Si se omite, el valor predeterminado 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.

$minMaxScaler devuelve un error si el input valor es alguno 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