冰山立方体BUC算法是一种计算稀疏立方体的构建算法,在构建数据立方体的过程中,如果构建完整的数据仓库可能会花费大量的计算、存储和时间成本。
不过因为在应用过程中大部分的数据都是稀疏的,我们就可以通过冰山立方体的方式简化数据立方体。具体的效果就是,对于本来2^n种排列组合,通过类似BUC的算法,排除过稀疏的数据之后就只剩下很少的一部分,大大提高了数据立方体的效率。
BUC算法的构建有点类似二叉树的剪枝操作。我找到了一些现成的程序,发现基本上都是在操作一些过于简单的数据(只有不超过十组,两三个维度),这里我重新用递归的方法构建了BUC算法,并且针对了水果分类的数据,规模上要更大一些,希望对想要了解BUC算法的同学有所帮助。
数据集
我们用到的水果数据集由爱丁堡大学教授 Iain Murray 所创。他买了很多种类的橙子、柠檬和苹果,并把它们的相关数据记录在表格中。然后密歇根大学的一些学者将这些水果数据编排了格式,点击这里可以下载这些数据:Machine-Learning-with-Python/fruit_data_with_colors.txt
导入库
import numpy as np
import pandas as pd
这里用到了numpy和pandas,是比较基础的python库,安装也很简单,就不多作介绍了。
读数据
fruit = pd.read_table('fruit.txt')
我把原始数据存在了fruit变量里,因为txt文件放在了同目录,这里就直接读取了。
离散化
#离散化mass width height color_score
fruit['mass_bins'] = pd.cut(fruit['mass'],4,labels=False).astype('str')
fruit['width_bins'] = pd.cut(fruit['width'],4,labels=False).astype('str')
fruit['height_bins'] = pd.cut(fruit['height'],4,labels=False)