算法交易

從 0 到 20 的自定義標準化

  • December 11, 2019

我想從 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 &lt; upper_lim)  {
 test = 10 * value / upper_limit 
} else {
 test = 10 * ( 1 + (value-upper_limit)/(max_value-upper_limit) )
}  

引用自:https://quant.stackexchange.com/questions/50240