Page 338 - 《软件学报》2026年第5期
P. 338

王撷阳 等: 基于数据分布的移动对象学习索引及查询算法                                                     2217


                    CDF  函数存在统计效应, 以随机数据集          (数据集具体内容详见第         6.1  节) 为例进行分析. 如图    6(a) 所示, 针对
                 整个数据集的     CDF  曲线趋势平缓且光滑规则, 但是如果仅选择数据集中的一段区间如图                      6(b) 就会发现数据趋势
                 具有明显的分段性、随机性, 这就增加了对于数据拟合的难度, 而多阶段的线性回归模型能够更有效地从数据集
                 的完整区域中将预测缩小至数千个区域.


                          700
                                                                  220
                                                                                           ⑤
                          600
                          500                                     215               ④
                         Position (×10 2 )  400                  Position (×10 2 )  210  ③

                          300
                          200
                                                                  205        ②
                          100                                         ①
                           0                                      200
                            0   100  200  300  400  500  600  700   200    205    210    215    220
                                        Key (×10 )                              Key (×10 ) 2
                                              2
                                     (a) 完整数据集趋势                              (b) 指定区间趋势
                                                图 6 CDF  预测键值位置示意图

                    NUGC_LI 会根据   CDF  的概率分布曲线对数据集进行划分, 这个过程中就会造成第                   2  部分内部节点各子树的
                 不同生长形态, 这一步骤与经典的           RMI 学习索引结构有所不同, RMI 对数据集进行均匀划分, 然后对各个数据子
                 集进行模型学习和训练, 但是         NUGC_LI 不追求数量上的平均划分, 会根据数据集的数据特点更加灵活地划分数
                 据. 例如图   6(b) 中的数据区间    [20 000, 22 000], 如果按照均匀划分将生成      [20 000, 20 500]、[20 500, 21 000]、
                 [21 000, 21 500]、[21 500, 22 000] 这  4  个数据节点, 但是在  NUGC_LI 的划分原则中, 因为  [20 500, 21 000] 区间中
                 存在明显的趋势变换, 因此在进行数据划分时, 会将原本的                 [20 500, 21 000] 数据节点替换为一个内部节点, 该内部
                 节点存在两个均为数据节点的孩子节点, 分别存储图中的区间②和③, 这样的划分规则能够使得生成的数据节点
                 ①②③④⑤大致符合同一线性趋势, 便于线性回归模型准确拟合该节点键值. 按照上述节点生长规律, 如算法                                   2
                 所示.
                 算法  2. 学习索引  NUGC_LI 构建算法.

                 输入: 键值数量    num_keys, 键值数组  value_keys, 预训练线性模型   pretrained_model, 节点阈值  NodeTHR, 代价模型
                 cost;
                 输出: 基于当前数据构建的学习索引           NUGC_LI.

                 1.  keys_remaining ← num_keys
                 2. while keys_remaining do
                 3.  if node.cost < best.cost then /*自下而上计算出  value_keys 的最优划分*/
                 4.   num_leaf_nodes ++
                 5.   leaf_node_bulkload()
                 6.    NUGC_LI ← leaf_node
                 7.  find_best_partition_top_down(value_keys);
                 8.  if keys_remaining > NodeTHR 或 node.cost > best.cost then /*判断该节点是内部节点还是数据节点*/
                 9.    num_internal_nodes++ /*键值数量超过阈值或代价较高时, 节点设置为内部节点*/
                 10.  if 当前子树深度一致, 内部节点分布均匀 then
   333   334   335   336   337   338   339   340   341   342   343