如有任何疑惑,请读这本书。
如希望复习相应的知识概念,请ctrl+F( or cmd+F)查阅具体的关键词。
keyword:数据质量, data cleaning, data integration, data reduction, ETL, binning, outlier analysis, 实体识别问题, [图片上传失败...(image-f7793d-1544357627729)]
x^{2} 检验, correlation coefficient, covariance, dimensionality reduction, numerosity reduction, data compression, min-max normalization
1.数据质量
数据质量涉及很多因素,包括准确性、完整性、一致性、时效性、可信性和可解释性。
准确性:信息的正确性。(e.g.姓一栏填了全名)
完整性:信息有没有缺失(e.g.出生日期没有月份信息)
一致性:数据在不同的存储位置值是否相同(e.g.同一个人在A表性别为男,B表性别为女)
时效性timeliness:数据是否在时效期内(e.g.上个月的销售数据没能及时上传)
可信性believability: 反映(数据挖掘结果的)用户对数据的信赖程度(e.g.销售部门根本不在意我们做的数据分析结果报告)
可解释性interpretability: 数据是否容易理解(e.g.销售部门看不懂我们的报告结果)
2.数据预处理的主要任务
2-1.数据清理(data cleaning): 通过填写缺失的值、光滑噪声数据、识别或删除离群点,并解决不一致性inconsistency来“清理”数据。
2-1-1 填写缺失的值:
a)忽略元组
当缺少类标号的时候精彩这样做,适用于这些元组中大部分缺少了多个属性值的情况。
但如果缺少属性值的元组占得比例比较大,这种做法是不可取的。
b)人工填写缺失值
传说中的以人工冒充人工智能,这样的做法不必说,费时费力,数据量稍大,就是不可行的。
c)使用一个全局变量填充缺失值
比如"unknown"或者"undefined", 这对于用户来讲是清晰地,但数据挖掘程序可能会认为"unknown"成为了一个很可观的cluster.
d)使用属性的中心度量
整个数据集的中心度量比如中位数,平均值等
e)某个cluster的中心度量,这会比前者好很多
f)某个class的中心度量,这和e)没有本质区别,我们也可以想到一些别的分类的依据,再对每个类取中心度量,这个思路也是分箱的思路
g)使用最可能的值来填充
通过bayes,decision tree等方法归纳并预测这个值,填入
2-2 光滑噪声数据:
2-2-1 分箱binning
把(从小到大排列的)数据分为长度相等的n个数据段,每个段就是一个箱子,对于分出来的箱子,我们的值都用中位数代替
e.g. 4, 8, 15 => 8, 8, 8
2-2-2 回归regression, 又称函数拟合
regression = find the line of best fit.
用一个函数拟合,至于这个函数是怎么来的,这涉及到machine learning,算是data和AI基础知识中最有趣也是最基础的一部分,之后一本书我们会具体讨论这个问题。
2-2-3离群点分析(outlier analysis)
通过clustering来圈出比方说95%的数据点,剩余的可视为噪声。
2-2-4数据清理整个过程
step-1 偏差检测(discrepancy dectection)
导致偏差的因素有很多,输入、数据退化(e.g.过时的地址)
进行:对meta-data元数据进根据领域知识进行数据可接受值的排查,通过统计手段排除一些噪声、离群点和反常值
step-2 编码和数据类型错误
有一定基础编程知识的程序员都知道,在任何语言中我们初始化变量variable时都显式的或隐式的开辟了内存空间,分配了一段内存。
(具体地说,以C和python3举例,C语言显式的分配内存。
e.g. int var;
这分配了一个int长度的内存空间,这个空间的值目前是undefined状态的,可能取值错误,但更常见的是该空间是曾经被其他进程使用过并留下痕迹的,输出一堆意义不明的数字
var = 10;
在开辟的内存空间上分配了集体的值。
引用数据类型或者说结构体在此不做讨论,实际上有一定编程基础的同学都应该了解这些知识,请参考算法导论。
e.g. var = 10
这实际上是执行了 int var = 10;的所有操作,开辟了内存并分配了具体值。
所以python中不分配值而定义变量是不可行的,python并没有涉及机制来存储没有开辟空间的变量名信息(NameError)
Python3中我们不必指定变量的类型,因为输入的值会被自动确认变量类型,但有时这也对一些习惯于手动分配内存的程序员带来了心理上的不快。
比方说也许我只需要一个short (int) var = 10;
这样可以节约一点内存开销,但在python3中我们由于是自动分配内存,就没办法这样精确地去调节short.
python仍然是强类型语言,作为高级语言的代表被讨论。
附链接:Python3 基本数据类型www.runoob.com
)
所以话说回来,我们的数据类型需要统一,过大的数据类型会占用更多资源,而数据类型long->int则可能造成精度丢失。
对于编码,比如date来说 12/05/2012和2012/05/12自然是不一致的,如果不考虑他们的不一致而粗暴的合并数据,则会造成意想不到的错误。
一些数据清理相关的商业工具:
数据清洗工具(data scrubbing tool)
数据审计工具(data auditing tool)
数据迁移工具(data migration tool)
ETL(Extraction/Transformation/Loading)工具
2-3 数据集成(data integration):将来自多个数据源的数据合并并用于分析。
数据挖掘经常需要数据集成:合并来自多个数据存储的数据
良好的数据集成有助于减少结果数据集的冗余redundancy和不一致inconsistency.
2-3-1 实体识别
来自多个信息源的现实世界的等价实体如何才能“匹配”?这涉及到实体识别问题。
每个属性的元数据包括名字、含义、数据类型、属性值的范围、空值处理规则等信息。
2-3-2 冗余和相关分析
冗余:一个属性如果可以由另一个或多个属性“导出”,那么这个属性可能是冗余的(但有的时候我们需要构造一个被导出的属性来支持更便捷的数据分析,所以冗余在数据挖掘中,与RDBMS一样,不一定是完全的坏事)
有些冗余可以被相关分析检测到。
对于标称属性(nomial attribute), 我们使用卡方检验。
对于数值属性(numeric attribute), 我们使用相关系数(correlation coefficient)和协方差(covariance)。
2-3-2-1 卡方检验
卡方计算公式(又称 Pearson [图片上传失败...(image-b2fb5b-1544357627729)]
x^{2} 统计量)
[图片上传失败...(image-3bd244-1544357627729)]
x^{2} = \sum_{i=1}{c}{\sum_{j=1}{r}{ \frac{(o_{ij}-e_{ij})^{2}}{e_{ij}}}}
其中,[图片上传失败...(image-389d23-1544357627729)]
o_{ij}是联合事件 [图片上传失败...(image-431bc7-1544357627728)]
(A_{i}, B_{i}) 的观测频度(即实际计数),而 [图片上传失败...(image-94896c-1544357627728)]
e_{ij} 是 [图片上传失败...(image-825288-1544357627728)]
(A_{i}, B_{i}) 的期望值。
[图片上传失败...(image-b84a72-1544357627728)]
e_{ij} =\frac{count(A = a_{i}) \times count(B = b_{j})}{n}
//TODO 拍照本书p95 例题 3.1
2-3-2-2 数值数据的相关系数
对于数值数据,我们可以通过计算属性A,B的相关系数(又称Pearson积矩系数, Pearson's product moment coefficient, named from Karl Pearson)
来计算相关度 [图片上传失败...(image-a7d6da-1544357627728)]
r_{A, B}
协方差 计算公式: [图片上传失败...(image-98990b-1544357627728)]
cov(A, B) = E((A-\bar{A})(B-\bar{B})) = \frac{\sum_{i=1}^{n}{(a_{i}-\bar{A})(b_{i}-\bar{B})}}{n}
相关系数: [图片上传失败...(image-637d5e-1544357627728)]
r_{A, B} = \frac{Cov(A, B)}{\sigma_{A}\sigma_{B}}
2-4 数据规约(data reduction):包括维规约和数值规约
2-4-1 维规约dimensionality reduction:减少属性个数,方法包括:小波变换、主成分分析
小波变换涉及数字与信号系统的知识,这里略过。
主成分分析超出本书知识范围,之后也许会单独列出一篇文章来详细讲述。
2-4-2 数值规约numerosity reduction:方法分为参数方法和非参数方法
参数方法: 使用模型估计数据, 非参数方法:直方图、聚类和数据立方体聚集
2-4-2-1 直方图、聚类和数据立方体聚集
等宽直方图实际上就是分箱,通过分段来得到区间,再通过区间内部的中心趋势度量来得到一个近似值
另一种直方图叫等频直方图,即每个区间内的数据数量近似相同,并且在此基础上尽可能使桶内数据方差不大。
聚类:簇内对象相似,簇外对象相异。用簇中心度量代替数据
抽样:允许小得多的随机样本来表示一个更大型的数据集
无放回简单随机抽样(SRSWOR)
有放回简单随机抽样(SRSWR)
簇抽样:即clustering
分层抽样:如果D被划分为互不相交的部分,称作“层”。
2-4-2-2 数据立方体聚集
聚集的概念在之前的章节已经详细的解释了,这实际上只是另一种没有技术含量的分类的概念。
2-4-3 数据压缩(data compression)
分为有损压缩和无损压缩,如果原始数据能够由压缩后的数据重构,是无损压缩,否则是有损压缩。
2-4-4 属性子集选择
属性的“好坏”通常由统计显著性检验来确定,也可以使用一些其他评估度量,如:决策树建立的依据:信息增益度量(Information Gain)
2-5 数据变换及数据离散化
数据变换(Data transformation):
Step-1: 光滑smoothing, 去掉数据中的噪声,技术包括:分箱、回归和聚类
Step-2: 属性构造, 详细描述见本文中
Step-3: 聚集: 对数据进行汇总
Step-4: 规范化:把数据按比例缩放,主要是为了权重的平衡
Step-5: 离散化: numeric data-> discrete data, 主要是区间分类
2-5-1 最小-最大规范化
Step-1: 得到极差值(max - min)和需要映射到的区间的长度的比例(ratio)
Step-2: 进行映射
数据变换还有分箱和z-score规范化,不是很重要,也是不断重复一些基础的统计学概念,之后我再行补充。