您的位置:首页 > 其它

数据挖掘:数据立方体技术的基本概念及计算的一般策略

2014-07-24 20:42 507 查看
数据立方体技术,是数据挖掘中的一个基本概念。它是将多维数据,按照其对应的多个维度,生成一个多维的类似于立方体的结构,方便进行多维数据的OLAP操作。

在数据立方体中,主要的操作就是我们平时接触比较多的数据库中的聚集操作:sum,count,max,min等。与此相对应,也就不难理解,数据立方体其实就是在大量的多维数据中,进行了一个group by的操作,使得数据能够按照一定的规则聚集起来,从而形成一些小的立方体,继而观察各种聚集的值。还会看到,基本方体的单元是基本单元,也就是说每个维上都是具体的值,而无任何的维上的聚集操作。对于非基本单元则是聚集单元,因为非基本单元肯定是在某个或某些维上进行了聚集操作。同时,使用“*”来表示被聚集的维。

在这里,有个祖先和后代的相对概念。专业的说,祖先是后代在某些维上的上卷操作,不考虑某些维或某些维已被上卷;而后代,则是祖先在某些唯上的下钻操作,更细致的去考虑某些维。因此祖先是后代的泛化,后代是祖先的具体。

冰山立方体。当如果想物化完全立方体时,如果数据量很大,则会使得在存储空间和OLAP的响应时间上消耗很大。因此,就有人提出了一种部分物化的概念:冰山立方体。在计算立方体时,当某一立方体的值小于一定的阈值时,则将这个立方体裁掉;当大于或等于阈值时,则保留。这样就使得能够只将大数据量的立方体保留下来,而不感兴趣的稀疏的立方体剪裁掉。这个过程可以由一个SQL查询说明:

compute cube sales_iceberg as
select month,city,customer_group,count(*)
from salesInfo
cube by month,city,costumer_group
having count(*)>=min_sup


从以上的SQL可以看出,为计算立方体,对salesInfo中的数据,按照month、city和customer_group进行分组,并同时进行count的聚集操作。同时,按照一个最小阈值min_sup进行筛选:只有大于该阈值的数据才被筛选出来组成冰山立方体。

有时候,为了系统的压缩数据立方体,提出了一种闭覆盖的概念。其实对于类似于闭的概念,大家应该并不陌生:在一个集合中,如果某个集合的某个值一定,如果还有范围更小的集合有这样的值,则这个集合就不是闭的:相反,如果对于这个集合,值一定,但并不存在比这个集合小,但是值却>=这个集合的集合,就说这个集合是闭的。在这里闭覆盖就是这样的概念:如果不存在一个单元d是c的后代,并且d与c具有相同的度量,那么就说单元c是闭单元。

数据立方体计算的一般策略:(优化技术)

1.排序、散列和分组

由于生成立方体是一种group by的分组操作,相同的值会被分配到同一组中。因此在进行聚集之前,首先将某些属性进行排序,然后再按照某些组进行分组,这样有利于进行最后的聚集运算。比如,对branch、day和item计算总销售。更有效的方法是先按branch,再按day对元组或者单元进行排序,然后按item对他们分组。这样进行groupby操作时,就可以按照一定的顺序来遍历这些数据,更快的进行聚集操作。

2.同时聚集和缓存中间结果

在立方体计算中,从先前计算的较低层聚集而不是从基本事实表来计算较高层聚集是更有效的。此外,从缓存的中间计算结果同时聚集可能会减少开销很大的磁盘I/O操作。

3.当存在多个子女方体时,由最小的子女聚集。

比如,在计算销售立方体C(branch)时,当存在先前计算的方体C|branch,year|和C|branch,item|时,如果不同的商品远比不同的年份多(说明一年中的数据量比一类商品的数据量要大),这个时候使用C|branch,year|去计算C|branch|比使用C|branch,item|更有效。因为前者包含的数据更大,这样去计算更泛化的C|branch|时的跨越度更小。

4.可以使用先验剪枝方法有效的计算冰山立方体

先验性质,是一个用途十分广泛的性质:如果给定的单元不满足最小支持度,则它的后代也不满足最小支持度。因此,可以应用此性质来减少冰山立方体的计算量。在这里,要区别下冰山立方体和先验性质:冰山立方体是指只对满足阈值的那部分立方体感兴趣,而其他的则删除掉;先验性质则是指如果祖先不满足,则后代也不满足。这样,在计算冰山立方体时,如果计算了某一个立方体的值,如果不满足阈值,则就不需要再去计算他的后代的值了。

参考文献:数据挖掘--概念与技术(韩家炜著)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: