一、概要 ✨✨
1. 为什么要进行数据挖掘?
- 进入信息时代(信息时代数据量暴增)
- 数据挖掘是信息技术的进化(数据暴增存储后,需要有工具进行数据分析)快速增长的海量数据收集、存放在大量的大型数据库中,没有强有力的工具,理解他们已经远远超出了人的能力,导致数据丰富但信息贫乏。数据和信息之间的鸿沟越来越宽,这就要求必须系统的开发数据挖掘工具,将数据转换成有用的信息。
2. 数据挖掘需要解决什么问题?
面对新的数据带来的问题,传统的分析技术往往遇到困难,它引发了人们对数据挖掘的研究。
- 处理海数据集的算法要有可伸缩性(scalable)
- 数据的高维性,随着维度的增加,计算复杂度将迅速增加。
- 异种数据和复杂数据。
- 数据的所有权和分布。
- 非传统的分析。数据挖掘的数据集并不是精心设计的实验结果,常常涉及非传统数据类型和分布。
3. 数据挖掘的发展过程?
数据挖掘使用了如下领域的思想
- 统计学的抽样,估计和假设检验。
- 人工智能,模式识别,机器学习搜索算法。
- 最优化,信息论,数据库,并行计算,分布计算。
4. 数据挖掘的步骤
(1)定义问题。在开始知识发现之前最先的也是最重要的要求就是了解数据和业务问题。
(2)建立数据挖掘库。建立数据挖掘库包括以下几个步骤:数据收集,数据描述,选择,数据质量评估和数据清理,合并与整合,构建元数据,加载数据挖掘库,维护数据挖掘库。
(3)分析数据。分析的目的是找到对预测输出影响最大的数据字段,和决定是否需要定义导出字段。
(4)准备数据。可以把此步骤分为四个部分:选择变量,选择记录,创建新变量,转换变量。
(5)建立模型。建立模型是一个反复的过程。
(6)评价模型。模型建立好之后,必须评价得到的结果、解释模型的价值。
(7)实施。可以有两种主要的使用方法。第一种是提供给分析人员做参考;另一种是把此模型应用到不同的数据集上。
二、数据的概念 ✨✨✨
1. 数据的基本概念
2. 分位数的计算
上下四分位数的计算,我们首先得知道什么是上下四分位数,;0.25 和 0.75 是权重,n+1 不是 4 的整数倍,有关的四分位数应该是计算所得小数相邻两个整数的加权平均数。权重的大小取决于两个整数位置的距离的远近。
- 标称属性的相似度计算
3. 各种距离
闵可夫斯基距离(Minkowski distance,Lp距离):
d
(
x
,
y
)
=
(
∑
k
=
1
n
∣
x
k
−
y
k
∣
r
)
1
/
r
d(x,y) = (\sum_{k=1}^{n}|x_k-y_k|^r)^{1/r}
d(x,y)=(k=1∑n∣xk−yk∣r)1/r
r = 1时,即曼哈顿距离,他是两个具有二元属性的对象属性之间不同的二进制位个数。
r = 2时,即L2范数,欧几里得距离。
r = 无穷大时,上确界(
L
m
a
x
L_{max}
Lmax范数)
Lp距离具有以下性质。
- 非负性。对于所有x,y,d(x,y)>0,当且仅当x=y时为0
- 对称性。d(x,y) = d(y,x)
- 三角不等式。d(x,z) =< d(x,y) + d(y,z)
二元数据的相似性度量:
f
00
=
x
f_{00} = x
f00=x取0并且y取0的属性个数。
f
01
=
x
f_{01} = x
f01=x取0并且y取1的属性个数。
f
10
=
x
f_{10} = x
f10=x取1并且y取0的属性个数。
f
11
=
x
f_{11} = x
f11=x取1并且y取1的属性个数。
简单系数匹配(SMC):
SMC =
f
11
+
f
00
f
01
+
f
10
+
f
11
+
f
00
\frac{f_{11}+f_{00}}{f_{01}+f_{10}+f_{11}+f_{00}}
f01+f10+f11+f00f11+f00
Jaccard相似系数:
J =
f
11
f
01
+
f
10
+
f
11
\frac{f_{11}}{f_{01}+f_{10}+f_{11}}
f01+f10+f11f11
三、数据预处理 ✨✨✨
1. 为什么要进行数据预处理?
在真实世界中,数据通常是不完整的(缺少某些感兴趣的属性值)、不一致的(包含代码或者名称的差异)、极易受到噪声(错误或异常值)的侵扰的。因为数据库太大,而且数据集经常来自多个异种数据源,低质量的数据将导致低质量的挖掘结果。
- Min-max normalization
v ′ = v − m i n A m a x A − m i n A v^{'} = \frac{v- min_A}{max_A-min_A} v′=maxA−minAv−minA - 标准化:
s ′ = v − μ σ s^{'} = \frac{v-\mu}{\sigma} s′=σv−μ
2. 数据清洗解决了什么问题?
- 填补缺失值
填补策略:smooth by bin means, smooth by bin median, smooth by bin boundaries - 光滑噪声数据
- 识别并去除异常孤立点
- 残缺数据
- 错误数据(不一致)
- 重复数据
3. 数据集成
从不同的数据库,数据立方体,和文件中集成数据。
3.数据规约
- 维度规约
基本原理:小波,主成分分析,特征选择,特征创造/font>
小波处理:一种用于空间高效的函数层次分解的数学工具
主成分分析PCA:PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。(这k个新维度上数据的方差最大)
- 数量规约
- 数据压缩
四、数据仓库 ✨✨✨✨✨
数据立方体
- 多维数据模型:为了满足用户从多角度多层次进行数据查询和分析的需要而建立起来的基于事实和维的数据库模型,其基本的应用是为了实现OLAP(Online Analytical Processing)
- 立方体:它是由维度构建出来的多维空间,包含了所要分析的基础数据,所有的聚合数据操作都在它上面进行
- 方体:给定维的集合,可以对给定维的每个可能的子集产生一个方体给定n维,可以产生(2的n次幂)个方体(包括了all,即0-D cuboid),其中n-D为基本方体base cuboid。
- cell : 没找到呀
- 格 : 没找到呀?数据立方体是方体的一个格(grid)
- 维度:观察数据的一种角度,比如在上图中address、item、time都可以被看作一个维度,直观上来看维度是一个立方体的轴,比如三个维度可以构成一个立方体的空间
- 维度成员:构成维度的基本单位,比如对于time维,包含Q1、Q2、Q3、Q4四个维度成员
- 层次:维度的层次结构,它存在两种:自然层次和用户自定义层次。比如对于时间维,可以分为年、月、日三个层次,也可以分为年、季度、月三个层次。一个维可以有多个层次,它是单位数据聚集的一种路径
- 度量:在一个数据立方体中,从每个维度上都选取一个确定的维度成员,这些维度成员组合所确定的一个点就是度量值。比如上面的3月份安全温哥华的值是150。150就是度量。
- 分布式:可以将数据集分成较小的子集,然后计算每一个每一个子集的度量,最后合并计算结果,得到整个数据集的度量)例如可以用不同的函数来求数据集的sum、count、min、max,最后合并这些计算记过,得到数据集的度量值
- 代数式:通过一个代数函数或者分布式多个分布式度量的计算。例如取分布式度量中的sum和count 用mean()计算平均数 mean=sum/count
- 整体度量:对整个数据集度量,不能通过划分子集并合并子集来度量。例如计算中位数、众数
-
钻取(Drill-down):在维的不同层次间的变化,从上层降到下一层,或者说是将汇总数据拆分到更细节的数据,比如通过对2010年第二季度的总销售数据进行钻取来查看2010年第二季度4、5、6每个月的消费数据,如上图;当然也可以钻取浙江省来查看杭州市、宁波市、温州市……这些城市的销售数据。
-
上卷(Roll-up):钻取的逆操作,即从细粒度数据向高层的聚合,如将江苏省、上海市和浙江省的销售数据进行汇总来查看江浙沪地区的销售数据,如上图。
-
切片(Slice):选择维中特定的值进行分析,比如只选择电子产品的销售数据,或者2010年第二季度的数据。
-
切块(Dice):选择维中特定区间的数据或者某批特定值进行分析,比如选择2010年第一季度到2010年第二季度的销售数据,或者是电子产品和日用品的销售数据。
-
旋转(Pivot):即维的位置的互换,就像是二维表的行列转换,如图中通过旋转实现产品维和地域维的互换。
数据立方体的物化
- 全物化。 实现计算所有的数据立方体。
- 半物化/部分物化。有选择的计算整个可能的方体中适当的子集。
- 确定要物化的子集
- 在查询时利用物化的方体。
- 在装入和刷新时,有效的更新物化的方体。
在很多情况下,数据立方体的空间大多被低度量值的数据单元所占据,而这些数据单元往往是分析者很少关心的内容。冰山立方体的计算能够减少物化数据单元所占有的存储空间
聚集路径的选择,优化
MultiWay
Bottom-Up Computation
自底部向上计算 = =搞了半天,这就是MultiWay方法,计算弄懂了就很简单。
计算以2-D平面为例:
维的大小:A——40;B——400;C——4000
多路数组聚集:是一种典型的计算完全立方体的一种方法,也是一种使用数组直接寻址的方法,其中维值通过位置或对应数组位置的下标访问。该算法的思想是将最小的平面放在内存中,对最大的平面每次只是取并计算一块。
在设计该算法的时候,旨在解决两个问题:
- 尽量减少内存块反复调入内存的次数
- 尽量利用较少的内存空间来完成计算
BUC算法
Top-Down Computation
自顶向下计算 BUC方法(BUC是自顶向下为啥不叫TDC?BUC不是Buttom-Up Computation的简称吗???那为啥不叫TDC?搞人心态,爷佛了)
BUC算法
1. 首先,扫描整个输入,计算整个度量(如总计数);
2. 针对方体的每一维进行划分 ;
3. 针对每一个划分,对它进行聚集,为该划分创建一个元组并得到该元组的计数。判断其分组计数是否满足最小支持度;
4. 如果满足,输出该划分的聚集元组,并在该划分上对下一维进行递归调用,否则进行剪枝操作。
优缺点:
- BUC算法中采用了分治策略,优点在于能够分担划分开销,减少不必要的计算消耗。
- BUC的性能容易受到维的次序以及不平衡数据的影响,应当以维基数的递减顺序进行划分。例 (优化:排序、散列和分组技术)理想地,应当首先处理最有区分能力的维,维应当以技术递减序处理。基数越高,分区越小,因而分区越多。
- BUC不像多路数组聚集(MultiWay),不能利用父子关系共享聚集计算。
问题来了,啥叫多维共享聚集计算?
在以ABD为根的子树中的所有方体都包含维AB,以ACD为根的子树中的所有方体都包含维A,我们把子树中所有方体都包含的维叫做这些子树的共享维。
Star-Cubing
- 一种集成自顶向下和自底向上的立方体计算方法,结合了多路数组聚集中的同时聚集和BUC中的Apriori剪枝策略。
- 利用星型树数据结构进行存储,其中核心的部分就是引入共享维的概念。如果共享维的聚集值不满足冰山条件,则共享维向下的所有单元都不满足冰山条件。
如果共享维的聚集值不满足冰山条件,则沿该共享维向下的所有单元也不可能满足冰山条件
方体树:树的每一层代表一个维,每个节点代表一个属性值。每个节点有4个字段:属性值,聚集值,指向可能后代的指针和指向可能兄妹的指针。
- 采用了树结构来表示方体;
- 合并了公共前缀,能够节省内存;
- 能够聚集内部节点的值,可用于基于共享维的剪枝;
- 对树结构的遍历即可得到一个特定元组
假设单个维A在属性值p上的聚集不满足最小支持度,则将这样的节点用*替换,进一步压缩方体树。我们称属性A中的节点p为星节点,使用星节点压缩后的方体树为星树。
星规约
还是难以理解Star-cubing技术= =有空问同学
节点排序
- 虽然采用星树结构提供了对原始数据的无损压缩且很好的改善了内存的利用率,但是遍历星树所需的时间开销也很大。
- 优化:对每一维(层)上的所有节点按字母顺序排序,星节点可以出现在任何位置。
子树剪枝
子树生成的条件有两个:
- 当前节点的度量必须满足冰山条件;
- 生成的子树必须至少包含一个非星节点。
维排序
- Star-Cubing对维的次序是敏感的。
- 以维基数的递减顺序进行排序。
五、关联规则
- 频繁闭项集
所谓闭项集,就是指一个项集X,它的**直接超集(最小的严格超集)**的支持度计数都不等于它本身的支持度计数。如果闭项集同时是频繁的,也就是它的支持度大于等于最小支持度阈值,那它就称为闭频繁项集。 - 最大频繁集
如果X是一个频繁项集,而且X的任意一个超集都是非频繁的,则称X是最大频繁项集。
这个应该说是比较明确的,就是这个集合已经不能再扩充了,否则就不是频繁集了。
极大频繁项集<频繁闭项集<频繁项集