Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ / /

$minMaxScaler (função de janela)

Novidades na versão 8.2.

$minMaxScaler

Normaliza uma expressão numérica dentro de uma janela de valores. Por padrão, os valores podem variar entre zero e um. O menor valor se torna zero, o maior valor se torna um e todos os outros valores são dimensionados proporcionalmente entre zero e um. Você também pode especificar um valor mínimo e máximo personalizado para o intervalo de saída normalizado.

$minMaxScaler está disponível somente no estágio $setWindowFields.

$minMaxScaler operador de blocos tem a seguinte sintaxe:

{ $minMaxScaler: <numeric expression> }

O valor pode ser:

  • Uma expressão numérica, que é o valor que você deseja normalizar. Pode ser um campo numérico específico ou valor calculado a partir de seus documentos.

  • Um documento no seguinte formato:

    {
    input: <numeric expression>,
    min: <constant numeric expression>,
    max: <constant numeric expression>
    }
    Campo
    Descrição

    input

    expressão numérica , que contém o valor que você deseja normalizar.

    min

    Valor mínimo que você deseja na saída. Se omitido, o padrão é 0.

    max

    Valor máximo que você deseja na saída. Se omitido, o padrão é 1.

$minMaxScaler usa a seguinte fórmula para normalizar a expressão numérica :

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

Onde:

x

Valor a normalizar.

min

Valor mínimo desejado de saídas.

max

Valor máximo desejado de saídas.

min(X)

Valor mínimo na faixa.

max(X)

Valor máximo no intervalo.

O $minMaxScaler retorna um erro se o valor input for qualquer um dos seguintes:

  • Non-numeric

  • Zero

  • Arrays vazias

  • Strings

Suponha que seus documentos na sua coleção tenham um campo chamado a com os seguintes valores:

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

Considere o seguinte estágio do pipeline e a saída:

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}

No exemplo anterior, o pipeline usa o $minMaxScaler para calcular dois valores dimensionados:

  • scaled, que aplica os valores padrão, 0 e 1, à escala.

  • scaledTo100, que aplica um intervalo entre 0 e 100 à escala.

A saída mostra o valor original de a e os dois valores dimensionados. O $minMaxScaler utiliza o seguinte para os documentos, onde min(X) é 1 e max(X) é 21 (calculado a partir dos documentos), para retornar os valores dimensionados:

{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

Voltar

$minN-array-element

Nesta página