算法交易
從 0 到 20 的自定義標準化
我想從 0 標準化到 20
例如,現在我使用中位數對動態異常值排除進行正規化。
所以它適用於以下一些值
[100,200,19,0,200,200,12,19000,14000]
它被轉換為
[5, 10, 0.95, 0, 10, 0.6, 10, 10]
哪個好,我想對大於中值的值進行正規化,給出 11 到 20 的分數,比如
[5, 10, 0.95, 0, 10, 0.6, 20 , 16]
這是我現在使用的程式碼
var upper_lim = median*2; var test = 10*Math.min(value, upper_lim )/upper_lim;
本質上,您是在此處創建映射或函式。
在第一個實例中,您的最高分數為 10,並且您的映射如下:
$$ f(volume) = \left { \begin{matrix} 10* volume/200, \quad volume < 200 \ 10 * 1, \quad volume \geq 200 \end{matrix} \right . $$
您已在 JS 中將其編碼為(其中 200 為
upper_lim
):var test = 10*Math.min(value, upper_lim )/upper_lim;
現在您已將映射重新定義為以下內容:
$$ f(volume) = \left { \begin{matrix} 10* \frac{volume}{200}, \quad volume < 200 \ 10 * (1 + \frac{volume-200}{19000-200}), \quad volume \geq 200 \end{matrix} \right . $$
其中 19000 是
max_volume
。這個函式可以取的最大值是 20。var test; if (value < upper_lim) { test = 10 * value / upper_limit } else { test = 10 * ( 1 + (value-upper_limit)/(max_value-upper_limit) ) }