机器学习常用算法(一)R树的原理

来源:互联网 发布:淘宝上卖衣服利润 编辑:程序博客网 时间:2024/06/10 20:17

R树是树的数据结构用于空间的访问方法,即索引多维信息等地理坐标,矩形或多边形。R树是由安东宁Guttman提出的在1984[ 1 ]

发现在理论和应用的环境中大量使用。[ 2 ]一个树常见的实际使用情况可能是存储空间的物体如餐馆的位置,或者说典型的地图是

由多边形:街道,建筑,湖泊,海岸线的轮廓,并找到答案,快速查询如“找到所有的博物馆在我的当前位置”2公里,“在我的2

公里位置检索所有路段”(在显示他们导航系统)或“找到最近的加油站”(虽然不是以道路考虑)。树还可以加速最近邻索[ 3 ]

不同的距离度量,包括大圆距离[ 4 ]


R树的想法

数据结构的关键是组附近的物体和代表他们最小边界矩形在树下一个更高的水平;“R”的树是矩形。因为所有的对象都在这个边框,一个查询,不相

的矩形也不能相交的任何包含的对象。在叶级,每个矩形都描述了一个对象;在较高的水平,越来越多的对象的聚合。这也可以看作是数据集越来越

近似。类似于B-树,R树是一个平衡搜索树(因此所有的叶子节点都在同一高度),组织页面中的数据,并用于存储磁盘上(如用在数据库)。每一

页所包含的项的最大数目,通常表示为  M。这也保证了最小填充(除了根节点),但是最好的性能已经与最小填充30%–40%的最大个数(B-树保证

50%页填写的经历,和B *树即使是66%)。这是空间数据与存储在B树的线性数据需要更复杂的平衡。与大多数树的搜索算法(如,交叉,遏制,最近邻

搜索)是相当简单的。关键的想法是使用包围盒来决定是否在子树搜索。这样,在树上大部分的节点不在寻读。像树,使得树适合大数据集数据库,其

中节点可分页内存需要时,整个树不能被保存在内存中。R树的关键难点是建立,一方面是一种有效的平衡树(这样的叶子节点都在同一高度)另一方

面,矩形不包括太多的空间,不要重叠太多(这样在搜索过程中,较少的子树需要处理)。例如,插入元素获得一个高效的树的本意是要插入子树,需

要至少扩大其包围盒。一旦页面全是,数据被分成两个集应该覆盖的最小面积每。大部分的研究和改进R-Tree的旨在提高树的建立可以分为两个目标的

方法:从头开始建立一个高效的树(称为散装)和表演的变化对现有的树(插入和删除)。树不保证好最坏情况特性,但一般表现良好,与现实世界的

数据。[ 5 ]而更多的理论兴趣,(整装)优先树R-树的变体是最坏情况下的最优,[ 6 ]但是,由于增加了复杂性,并没有在实际应用中至今备受关

注。当数据被组织在一个树,这K近邻(任何lP范数)所有的点可以有效地利用空间连接计算。[ 7 ]这有利于基于K近邻算法很多,例如局部异常因子

德利-俱乐部,[ 8 ]密度聚类是一个链接聚类分析算法使用的R-树结构类似的一种空间连接能够有效地计算光学聚类。

数据布局

数据树中的组织页面,可以有一项变量数(一些预先定义的最大值,通常高于最低填写)。在一个非每个条目—叶节点店铺两部分数据:识别方法一子

节点,和包围盒这孩子节点内的所有条目。叶节点存储每个孩子所需的数据,往往是一个点或边界框代表孩子和外部标识符的孩子。点数据,叶条目可

以只点自己。多边形数据(通常需要大量的多边形存储)共同设置只存储MBR(最小外接矩形)的多边形随着树的唯一标识符。

搜索

输入的是一个矩形(搜索查询框)。搜索是搜索的一个非常相似的B树。搜索开始从树的根节点。每个内部节点包含一组矩形和指针对应的子节点,每个

叶节点包含空间对象的矩形(一些空间对象的指针可以有)。在每一个节点的矩形,它必须决定是否重叠搜索矩形或不。如果是,相应的子节点已经被

搜查也。寻找这样一个递归的方式直到所有重叠节点已走过。当一个叶子节点的达成,所含的包围盒(长方形)测试对搜索矩形和它们的对象(如果有)

放入结果集,如果他们在搜索矩形内。

优先搜索等最近邻搜索,查询由一个点或矩形。根节点插入优先队列。直到队列为空或所需的结果数已返回继续搜索队列中最近的输入处理。树节点的

扩展和孩子重新。叶项回来时遇到的队列。[ 9 ]这种方法可用于不同的距离度量,包括大圆距离地理数据。[ 4 ]


插入

插入一个对象,树的遍历从根节点递归。在每一个步骤,在当前目录下的所有矩形的节点进行检查,和候选人使用启发式如选择矩形需要至少扩大。搜

索然后降临到这个页面,直到到达一个叶子节点。如果叶子结点是满的,它必须分裂之前插入了。再次,由于穷举搜索是太贵了,一个启发式算法把节

点分为两种。添加新创建的节点之前的水平,这个水平可以再次溢出,这些溢出可以传播到根节点当节点也溢出,新的根节点创建和树增加了高度。

选择插入子树

在每一个级别,该算法需要决定在哪个子树插入新的数据对象。当一个数据对象完全包含在一个单一的矩形,选择是明确的。当有需要扩大多个选项或

矩形,可以有选择的树的性能有显著的影响。

在经典的基于对象插入最少需要扩大的子树。在更先进的R*树,混合启发式算法。叶的水平,它试图尽量减少重叠(如关系,宁愿至少扩大然后最小面

积);在更高的层次,它的行为类似于树,但关系又喜欢子树面积较小。减少重叠的矩形在R*树比传统的R树的主要好处之一(这也是另一个使用启发

式,结果不仅子树的选择)。

溢出的节点分裂

由于重新分配一个节点的所有对象分为两节点的选择指数,启发式需要找到最佳的分割。在经典的R-树,Guttman提出两个启发式算法,称为quadraticsplit

和linearsplit。在二次分裂,为长方形,有在同一个节点的最不利组合的配对算法的搜索,并把它们作为初始对象分为两个新组。然后搜索入口为一组

最强的偏好(面积增加)和指定对象本组直到所有对象赋值(满足最小填土)。

还有其他的分裂策略,如格林尼的分裂,[ 10 ]这个R*树分割启发[ 11 ](这再次试图最小化重叠,但也喜欢二次页)或线性分割算法和褐色了[ 12 ](但

可以产生非常不规则的矩形,不表现为许多现实世界的范围和窗口查询)。除了拥有更先进的启发式的分裂,R*树还试图避免将一些成员节点分裂的一个

节点,这是类似的方式B-树平衡节点溢出。这表明,减少重叠和提高树的性能。

最后,该采油树[ 13 ]可以被看作是一个R*树的变种,也可以决定不分裂的一个节点,但构建含所有额外的条目,一个所谓的超级节点,当它没有找到

个好的分裂(特别是高维数据)。

0 0
原创粉丝点击