数据挖掘概念与分析第五章笔记

数据立方体技术

在第四章的时候我们提出了一种技术OLAP,并且指明数据立方体系统在各种粒度为多维数据的交互分析提供OLAP工具。虽然在第四章已经简要的介绍过数据立方体,但是并没有指明数据立方体是怎样实现的,这个章节我们将对完全立方体和部分立方体的物化技术进行讲解

基本概念

完全立方体:p122中介绍了基本单元,聚集单元,祖先,子女,后代单元。

预计算完全立方体的时候可能会发生维灾难的情况。尽管如此,完全立方体的计算方法仍然是重要的。单个方体可以存放在辅助存储器上,在需要的时候进行访问。透彻地理解完全立方体的计算方法有助于我们开发计算部分立方体的有效方法 

冰山立方体:部分物化的立方体称为冰山立方体

闭立方体:如果不存在单元d,使的d是单元c的特殊化(后代),并且d与c具有相同的度量值,则c是闭单元。闭立方体是一个仅由闭单元组成的数据立方体。

立方体外壳 :只预计算涉及少数维的方体,这些方体形成对应的数据立方体的立方体外壳。

一般来说不管是完全立方体还是部分立方体,其计算方法的一般优化技术有以下:

  • 排序,散列和分组:对共享一组相同维值的元祖或单元进行聚集,利用排序,散列和分组操作对这样的数据进行访问和分组,以便有利于聚集的计算
  • 同时聚集和缓存中间结果:计算时不必要每次都从头算起,利用中间结果进行二次计算会大幅减少开销 
  • 当存在多个子女方体时,由最小的子女聚集:选择更泛化的子女方体来计算父母方体
  • 可以使用先验剪枝方法有效地计算冰山立方体 :介绍冰山立方体的计算方法时会详细介绍。

先验性质:如果给定的单元不满足最小支持度,那么该单元的后代也都不满足最小支持度

反单调的:如果某个单元c违反某条件,则每个后代也将违反该条件,遵守这一性质的度量称为反单调的。

完全立方体的计算方法 

由第四章可以知道,计算完全立方体很有可能发生维灾难,所以为了节约资源和提高性能,我们提供了一种不同的方法是基于数组的立方体结构开发的。该方法为多路数组聚集。

多路数组聚集:是一种典型的计算完全立方体的一种方法,也是一种使用数组直接寻址的典型MOLAP方法,其中维值通过位置或对应数组位置的下标访问。该算法的思想是将最小的平面放在内存中,对最大的平面每次只是取并计算一块。聚集的计算在p126已经给出。

在设计该算法的时候,旨在解决两个问题:

  • 尽量减少内存块反复调入内存的次数
  • 尽量利用较少的内存空间来完成计算

这两个问题的存在让我们需要考虑一个问题就是块的读取顺序。块的读取顺序会影响会影响计算时所需要的内存。书中p128页也提到了这个问题。

在书例子中,A=40,B=400,C=4000,每个维度分为4块,那么总共就有64块。我们按照基数从小到大的顺序来聚集。

1:首先聚集A,那么计算面BC:100*1000

2:聚集B,计算面AC。40*1000

3:聚集C,计算面AB。40*400

书中还给出了另一种用来进行对比的取法,该方法所需要的内存是上一个方法的十倍多。所以chunk取的顺序应该是按照基数由小到大的维度来取。

实验表明MultiWay计算比传统的ROLAP计算快的多,因为与ROLAP不同,MultiWay不需要节省空间来存放搜索码,而是直接使用数组寻址。

在上面的算法优化技术中我们提到了一种先验性质,我们可不可以用MultiWay方法来计算冰山立体效果呢?答案肯定是不能的。MultiWay计算从基本方体开始,逐步向上到更泛化的祖先方体。它不能利用先验剪枝,因为先验剪枝需要在子女节点之前计算父母节点。

部分立方体计算方法

 部分立方体中最重要的一个概念就是先验剪枝。我们可以回顾一下什么是先验剪枝。如果一个单元不满足最小支持度,则它的任何后代也不可能满足。假如一个方体单元的计数小于最小支持度,那么我们将其剪掉,顺带就剪掉了其后代单元。进行剪枝之后,直接减少了不满足我们要求的单元,这样会提高计算性能和计算效率。

部分立方体的常用两种计算方法:

1:BUC:从顶点方体向下计算冰山立方体

 BUC利用了递归的思想,具体的过程在例5.5中。思路很清晰明了。

BUC的性能容易受维的次序和倾斜数据的影响。理想地,应当首先处理最有区分能力的维,维应当以技术递减序处理。基数越高,分区越小,因而分区越多。

2:Star-Cubing

Star-Cubing集成自定向下和自底向上立方体计算,并利用多维聚集和类Apriori简直。该方法需要先构建星树,然后在该数据结构进行无损数据压缩,从而降低计算时间和内存需求量。

Star-Cubing中看的有点恼火,对于我来说理解起来有点困难,暂时先放一放,后面弄明白了之后再来补充。

外壳片段方法 

我们知道,冰山条件用来指定只计算完全立方体单元的一个子集,然而,尽管冰山立方体比对应的完全立方体小,并且需要较少的计算时间,但是它还不是最终解。原因在于冰山立方体本身的计算和存储开销可能仍然很高,并且很难确定合适的冰山阈值和冰山立方体不能增量地更新。

所以一个可能的解是计算一个很薄的立方体外壳,但是这种立方体外壳不支持高维OLAP。实际上,尽管数据立方体包括很多维,但是我们通常只在少数的几个维上进行OLAP操作。因此基于从实际的角度出发,我们一般的做法是找到某些感兴趣的方体,然后沿一两个维下钻,考察多个相关维上的变化。

外壳片段方法涉及三个步骤:

1:给定一个高维数据集,把维划分为互不相交的维片段,把每个片段转换成倒排序表示

2:然后构造立方体外壳片段

3:联机动态地组装和计算所需要的数据立方体的方体单元。

例5.9讲了如果构造排到索引,例很简单,一看就懂,完成了排到索引之后就需要构造立方体外壳。外壳片段计算利用了Frag-Shells算法,例5.10讲解的很清楚。

给定预计算的外壳片段,可以将立方体空间看做是虚拟立方体,并且联机进行关于该立方体的OLAP查询,通常有两种可能的查询类型:1):点查询  2):子立方体查询

点查询:由于点查询显示地提供相关维上被例示的变量集,通过找出最合适的片段,取出并与相关联的TID列表取交,可最大限度地利用预计算的外壳片段

子立方体查询:查询返回一个基于例示维和被询问维的局部数据立方体。

使用外壳片段查询比使用存放在磁盘上的预计算数据立方体回答查询显著快。与完全立方体计算相比,如果被询问的维少于4个,则推荐Frag-Shells;否则,可以使用更有效的算法来进行联机立方体计算。

 使用探索立方体技术处理高级查询

上面所涉及到的查询方式用于典型商务数据仓库。数据立方体已经进一步扩充到各种复杂的数据类型和新的应用,所以我们应该使用更高级的查询方式

抽样立方体:样本数据上基于OLAP的挖掘

传统上,OLAP拥有整个数据总体,而用样本数据只有一个小的子集,如果视图把传统的OLAP工具用于样本数据,则将遇到两个困难:1):在多维意义下,样本数据过于稀疏 2):使用样本数据,统计学方法将用来提供可靠性度量。抽样立方体架构旨在解决上诉问题。

为了度量结果是否符合总体,我们引入了置信区间的概念。置信区间可以告诉我们结果的可靠度,置信区间值越小,结果越可靠。

书中给出了置信区间的计算公式。影响置信趋近的大小有两个主要因素:样本数据的方差和样本的大小。如果方差很大表明对于预测而言所选的单元很差,样本很少的时候,可能导致很大的置信区间。

解决小样本问题的最好办法就是取得更多的数据。有两种办法包含"邻近"单元数据以增强查询回答的可靠性。

1):方体内查询扩展

我们进行方体内查询扩展的时候需要遵循一个原则:新样本旨在提高回答的置信区间,而不改变查询的语义。意思就是你扩展的维不能与你待预测的值有很大的关联性,最佳候选应该是与度量值不相关或者弱相关的那些维。

为了精确地度量维与立方体值的相关性,计算维值与他们聚集立方体度量之间的相关性,通常对数值数据使用皮尔逊相关系数,而对标称数据使用卡方相关检验。皮尔逊相关系数的定义为两个变量之间的协方差和标准差之商,卡方相关系数在第二章中已经介绍过了,这里就不做过多的介绍。

选择用于扩展的维之后,相继出现的问题是我们应该使用这些维中的哪些值?我们应该选择语义类似的值,如何选择语义类似的值?书中介绍了两个方法:一个是选择接近被例示的查询值的值,另一个就是t-检验。 

2):方体间查询扩展

方体检的查询跟方体内的查询类似。书中的例5.15介绍了样本数据上查询的立方体间查询扩展。

排序立方体:top-k查询的有效计算

top-k查询根据用户指定的优选条件,只返回最好的k个结果作为查询的回答,而不是返回大量不加区分的结果。

用户指定的优选条件由两部分组成:一个选择条件一个排序函数。排序立方体的核心思想是物化加分区。

这一章节看了两遍才看懂了一个大概。先大致有一个印象,后面需要用到的时候再深入研究。

猜你喜欢

转载自blog.csdn.net/Phoenix_tgd/article/details/81773036