정의
버전 8.2에 추가 되었습니다.
값 창 내에서 숫자 표현식 정규화합니다. 기본값 으로 값의 범위 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
구제척으로:
| 정규화할 값입니다. |
| 원하는 출력 최소값입니다. |
| 원하는 출력의 최대값입니다. |
| 범위 의 최소값입니다. |
| 범위 의 최대값입니다. |
값이 다음 중 하나에 해당하면 는 오류를 $minMaxScaler
반환합니다.input
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
계산합니다.
scaled
, 기본값 인0
및1
을 확장하다 에 적용합니다.scaledTo100
0
~100
범위 를 확장하다 에 적용합니다.
출력에는 의 a
$minMaxScaler
원래 값과 조정된 두 값이 표시됩니다.min(X)
1
max(X)
는 문서(여기서 는,21
는(문서에서 계산))에 대해 다음을 사용하여 배율이 조정된 값을 반환합니다.
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