数据挖掘BUC算法计算冰山立方体的python实现
冰山立方体计算
在很多情况下,数据立方体的空间大多被低度量值的数据单元所占据,而这些数据单元往往是分析者很少关心的内容。冰山立方体的计算能够减少物化数据单元所占有的存储空间。
常用计算方法:
BUC:Bottom-Up Computation
Star-Cubing
MMCubing,C-Cubing等
下面,我将就BUC算法的原理及实现做具体介绍:
BUC主要思想:
buc是一种从顶点立方体逐步向下到基本立方体的计算方法,用于计算稀疏冰山立方体。首先计算整个数据立方体的度量值,然后沿着每个维度进行划分,同时检查冰山条件,对不满足条件的分枝进行剪枝操作,对满足的在下一个维度讲行递归搜索。
BUC计算流程:
- 首先,扫描整个输入,计算整个度量(如总计数);
- 针对方体的每一维进行划分 ;
- 针对每一个划分,对它进行聚集,为该划分创建一个元组并得到该元组的计数。判断其分组计数是否满足最小支持度;
- 如果满足,输出该划分的聚集元组,并在该划分上对下一维进行递归调用,否则进行剪枝操作。
BUC算法特点及缺陷:
- BUC算法中采用了分治策略,优点在于能够分担划分开销,减少不必要的计算消耗。
- BUC的性能容易受到维的次序以及不平衡数据的影响,应当以维基数的递减顺序进行划分。
- BUC不像多路数组聚集(MultiWay),不能利用父子关系共享聚集计算。
BUC的算法实现:
首先我引入自定义数据集,BUC-test2.csv:
a1 b1 c1 d1
a1 b1 c2 d2
a1 b1 c2 d2
a2 b1 c1 d2
a2 b2 c2 d2
a3 b3 c1 d1
a4 b4 c1 d1
import pandas as pddataList = pd.read_csv('BUC-test2.csv') #读取数据集
print(dataList)
print("维数:",dataList.columns.size) #统计数据的维数
lenN = dataList.columns.size
NumFall = [0] * lenN # [0, 0, 0, 0]
ValueFAll = [] # [[a1,a2....],[b1,b2...]],定义一个列表value0fall用来统计并存储各维不重复的叶结点。
for j in range(lenN):ValueSingle = [] # 单个维度的取值for i in range(len(dataList)):if dataList.iloc[i, j] not in ValueSingle: #通过行号选取数据判断在不在列表ValueFall中ValueSingle.append(dataList.iloc[i, j])ValueFAll.append(ValueSingle)NumFall[j] = len(ValueSingle)
# 逐列逐行进行遍历,将每一列出现的非重复元素,加入到ValueSingle中,并统计个数,放到NumFall中print("ValueFAll:",ValueFAll)
print("NumFall:",NumFall)
print("BUC:")# 计算(temp)list出现次数:
def count(list, data):number = 0for i in range(len(data)):isIn = Truefor j in range(len(list)):if list[j] not in data.iloc[i].tolist(): # 将series对象转list才能not inisIn = Falsebreakif isIn:number = number + 1return numberdef BUC(tempList, n, curN, min_sup=3): # curN代表当前维度游标,最小支持度设为3if curN == n:return # 退出递归for i in range(NumFall[curN]):tempList.append(ValueFAll[curN][i])if count(tempList, dataList) >= min_sup:print("%s :%d" % (str(tempList), count(tempList, dataList)))BUC(tempList, n, curN + 1) # 加一维度递归调用tempList.pop()BUC(tempList, n, curN + 1)BUC([], 4, 0)
程序的输出为:
维数: 4
ValueFAll: [['a1', 'a2', 'a3', 'a4'], ['b1', 'b2', 'b3', 'b4'], ['c1', 'c2'], ['d1', 'd2']]
NumFall: [4, 4, 2, 2]
BUC:
['a1'] :3
['a1', 'b1'] :3
['b1'] :4
['b1', 'd2'] :3
['c1'] :4
['c1', 'd1'] :3
['c2'] :3
['c2', 'd2'] :3
['d1'] :3
['d2'] :4
总结:
BUC算法首先将拿到的数据进行维的划分,再对每个维进行属性的划分。例如,本实例首先将数据划分为A、B、C、D四个维度,而每个维度的划分依次为:[[‘a1’, ‘a2’, ‘a3’, ‘a4’], [‘b1’, ‘b2’, ‘b3’, ‘b4’], [‘c1’, ‘c2’], [‘d1’, ‘d2’]]。BUC算法的特点是用到了函数的递归调用,将每一个根节点的所有符合冰山条件(满足最小阈值)的子树输出,将不符合条件的子树进行剪枝操作。
数据挖掘BUC算法计算冰山立方体的python实现相关推荐
- 数据挖掘BUC计算冰山立方体及Python实现
因课程实验所需,对BUC算法进行了Python实现,过程多有坎坷,在此一记,以助后人. 一.关于BUC及冰山立方体的介绍 可参照如下链接: [数据挖掘概念与技术]学习笔记5-数据立方体技术 - CSD ...
- 数据挖掘BUC算法实现
算法描述: 根据给定的数据集,递归计算从0维到最大维的元组出现次数,若大于等于min_sup,则加入结果,若小于min_sup,则剪枝. 举个例子: 数据集如下: a1,b1 a1,b2 a2,b1 ...
- 【数据挖掘笔记五】数据立方体技术
5.数据立方体技术 数据仓库系统在各种粒度上为多维数据的交互分析提供OLAP工具,OLAP工具使用数据立方体和多维数据模型对汇总数据提供灵活的访问,因此重点要关注数据立方体的技术.数据立方体技术包括数 ...
- buc算法java实现,数据挖掘概念与技术(hanjiawei)阅读笔记--第五章(数据立方体技术)...
BUC 1.BUC(Botom-Up Construction)概念 从顶点方体向下计算冰山立方体 计算稀疏冰山立方体的算法 基于先验性质进行剪枝 ### 2.算法计算 例A(a1,a2,a3),B( ...
- BUC算法及其Python实现
数据分析有时候需要对多个维度上的数据进行聚集操作,完全立方体的聚集操作的复杂度是 2n2^n2n,过于复杂,而且有一些维度由于数据过小我们不需要去关心,因此需要对这种聚集操作进行剪枝,取其中符合的部分 ...
- 浅析部分物化以及冰山立方体的计算方法Star-Cubing
冰山立方体是部分物化的方体. 这里我们先了解部分物化的概念:有选择地计算整个可能的方体集中一个适当的子集.我们可以计算数据立方体的一个子集,它只包含满足用户指定的某种条件(如每个单元的元组计数大于某个 ...
- 使用python用递归的方法实现冰山立方体BUC算法(以水果分类数据为例)
冰山立方体BUC算法是一种计算稀疏立方体的构建算法,在构建数据立方体的过程中,如果构建完整的数据仓库可能会花费大量的计算.存储和时间成本. 不过因为在应用过程中大部分的数据都是稀疏的,我们就可以通过冰 ...
- 数据挖掘冰山立方体构建算法:BUC及实现
1.冰山立方体知识: waiting... 2.代码实现: 实现思路:全程模拟,写的时候理解还不够透彻,第一轮算出频率大于min_sup的集合,然后根据此集合开始不断向下扩展,筛选所有大于min_su ...
- BUC算法简介与python实现
冰山立方体这里听的不是很明白,BUC算法也是有点懵,借着实验也整理一下思路吧. 一.冰山立方体与BUC算法简介 1. 冰山立方体 2. BUC算法 算法简介 算法流程 举例 二.代码实现 1. 输入数 ...
最新文章
- 斯坦福CS330 2019秋季课程视频全新上线,专注多任务与元学习
- 大道至简第一章观后感(伪代码)
- 数据清洗最基础的10个问题,基本涵盖目前常见的数分场景!
- 力扣--让字符串成为回文串的最少插入次数
- 基于jsp的教师科研工作量_javaweb教师工作量管理系统
- C#LeetCode刷题之#704-二分查找(Binary Search)
- 【华为云技术分享】干货分享丨jvm系列:dump文件深度分析
- CCF NOI1050 矩阵乘法
- python制作查询工具发给别人使用_Python 制作查询商品历史价格的小工具
- 数据分析:穿越致富的正确姿势
- 沟通在日常管理工作中的重要性
- 软件测试设计之——场景设计法,判定表法
- 解决无线网络不稳定的两个方案几个方法
- MATLAB冒号用法
- python经济学_用python学习中级微观经济学【WARP篇】
- python非可选参数_带plac的可选参数的默认值和非默认值 - python
- 简述对linux系统的认识,对Linux的初步认识
- python网络编程 赵宏_2018年Python爱好者社区历史文章合集(作者篇)
- 数据库与文件的数据存储的区别
- 导纳矩阵 matlab,关于利用矩阵稀疏技术求解节点导纳矩阵的MATLAB编程