2017-08-03 71 views
0

我要寻找一种“机器学习”算法的动态调整基于预先定义的标准参数自动调整参数:基于机器时间

假设我有以下数据:

Iteration Batch_Size  Elapsed Time 
    1   1000    10 
    2   1000    11 
    3   1000    10 

我的标准是:“如果最近一次迭代的平均耗用时间小于60秒,则大小加倍”

由于最近3次迭代的平均耗用时间少于60秒,因此批量大小可增加到2000接下来的3次迭代s可能如下

4   2000    20 
    5   2000    31 
    6   2000    30 

而且我们继续这个过程。如果所经过的时间已经超过了60秒,然后我们退回到以前的值如下

120   32000    121 
121   32000    93 
122   32000    113 

123   16000    51 
124   16000    54 
125   16000    61 

是否有任何PL/SQL或SQL库中可用?

感谢

oradbanj

+0

您能解释“最近”有多少操作? 2,3,5,10,或者可能是10000? – krokodilko

+0

3个操作可以被认为是最近的。 – oradbanj

回答

1

我试图通过改变基于先前经过的时间值的随机数来模拟你经过的时间。然后,我使用窗口函数(avg)来计算当前和前2次经过时间的平均流逝时间。 ADJUSTED_BATCH_SIZE反映了变化的AVERAGE_ELAPSED_TIME。由于这是使用随机数,因此每次都会生成不同的结果集。尝试运行几次,看看你是否得到你所期望的。

WITH 
    build_data (iteration, batch_size, elapsed_time) 
    AS 
     (SELECT 1 iteration, 1000 AS batch_size, TRUNC (DBMS_RANDOM.VALUE (25, 120)) elapsed_time 
      FROM DUAL 
     UNION ALL 
     SELECT iteration + 1 
       , batch_size 
       , CASE 
        WHEN elapsed_time > 60 
        THEN 
         TRUNC (DBMS_RANDOM.VALUE (25, 70)) 
        ELSE 
         TRUNC (DBMS_RANDOM.VALUE (25, 120)) 
       END 
      FROM build_data 
      WHERE iteration < 1000), 
    calc_data 
    AS 
     (SELECT iteration 
       , batch_size 
       , elapsed_time 
       , ROUND (
        AVG (elapsed_time) 
         OVER (
          ORDER BY iteration ROWS 2 PRECEDING 
         ) 
       ) 
        average_elapsed_time 
      FROM build_data) 
    SELECT a.iteration 
    -- , batch_size 
     , elapsed_time 
     , average_elapsed_time 
     , GREATEST (
       batch_size 
      + (CASE WHEN average_elapsed_time < 60 THEN 1 WHEN average_elapsed_time > 60 THEN -1 ELSE 0 END * 1000) 
      , 1000 
     ) 
      adjusted_batch_size 
    FROM calc_data a 
ORDER BY iteration; 
+0

太好了。预计工作广告。 – oradbanj