《数据挖掘》—— 第3章 数据预处理
第3章 数据预处理
3.1 数据预处理:概述
数据质量:为什么要对数据预处理
数据质量涉及许多因素:
- 准确性(accuracy):数据是否正确,是否准确;
- 完整性(completeness):数据是否有记录,是否可获取;
- 一致性(consistency):数据的命名约定、数据代码或输入格式是否一致;
- 时效性(timeliness):数据是否及时更新;
- 可信性(believability):数据有多大可能是准确的,多少数据是用户信赖的;
- 可解释性(interpretability):数据是否容易理解。
数据预处理的主要任务
数据清理(data cleaning)
- 填写缺失值,光滑噪声数据,识别或删除离群点,并解决不一致性来“清理”数据。
数据集成(data integration)
- 集成多个数据库、数据立方体或文件,需要采取措施避免数据集成时的冗余。
数据归约(data reduction)
- 得到数据集的简化表示,它的规模要小得多,但能够产生同样的(或几乎同样的)分析结果。包括维归约(dimensionality reduction)和数值规约(numerosity reduction);
- 维归约,使用数据编码方案,以便得到原始数据的简化或“压缩”表示。例如,小波变换和主成分分析(数据压缩技术),属性子集选择(去掉不相关属性)和属性构造(从原属性集到处更有用的小属性集);
- 数值规约,使用参数模型(例如,回归和对数线性模型)或非参数模型(例如,直方图、聚类、抽样或数据聚集),用较小的表示取代数据。
数据变换(data transformation)
- 规范化、数据离散化;
- 概念分层
3.2 数据清理
缺失值
处理方法
- 忽略,仅当某一元组有较多缺失属性时适用;
- 人工填写,费时费力;
- 用一个全局常量填充,如使用字段“未知”作为一个新类,不太可靠;
- 用属性的中心度量(如均值或中位数)填充;
- 用与给定元组数同一类的所有样本的均值或中位数填充;
- 最常用方法:用最可能的值填充,使用基于推理的工具或算法确定,如决策树和贝叶斯推理。
方法(3)~(6)使数据诱骗,填入的值可能不正确。然而,方法(6)是最流行的策略;与其他方法相比,它使用已有数据的大部分信息来预测缺失值。
噪声数据
噪声(noise):被测变量的随机误差或方差。
处理方法
分箱(binning)
- 通过考察数据的“近邻”来光滑有序数据值。这些有序的值分布到一些“桶”或箱中。由于分箱方法考察近邻的值,因此它进行局部光滑;
- 对于用箱均值光滑,箱中每一个值都被替换为箱中的均值;类似地,还有用箱中位数光滑;
- 对于用箱边界光滑,给定箱中的最大和最小值同样是箱边界,箱中的每一个值都替换为最近的边界值。
例,将数据 4 , 8 , 15 , 21 , 21 , 24 , 25 , 28 , 34 4,\ 8,\ 15,\ 21,\ 21,\ 24,\ 25,\ 28,\ 34 4, 8, 15, 21, 21, 24, 25, 28, 34 分箱。
回归(regression)
- 用一个函数拟合数据来光滑数据。
离群点分析(outlier analysis)
- 通过聚类等方法来检测离群点并移除。聚类将类似的值组织成群或“簇”。直观地,落在簇集合之外的值视作离群点。
数据清理作为一个过程
偏差检测(discrepancy detection)
- 利用元数据(值域、取值范围、趋势、分布);
- 检查是否存在字段过载;
- 检查唯一性原则、连续性原则、空值原则;
- 使用数据清洗工具、数据审计工具。
3.3 数据集成
实体识别问题
- 例如,
A.customer_id
与B.cust_number
是否指相同属性; - 来自多个信息源的现实世界的等价实体如何匹配。
冗余和相关分析
-
一个属性(例如,年收入)如果能够由另一个或另一组属性“导出”,则这个属性有可能是冗余的。
-
有些冗余可以被相关分析检测到。给定两个属性,这种分析可以根据可用的数据,度量一个属性能在多大程度上蕴含另一个。对于标称数据,我们使用 χ 2 \chi^2 χ2 检验;对于数值属性,我们使用相关系数(correlation coefficient)和协方差(covariance),它们都评估一个属性的值如何随另一个变化。
标称数据的 χ 2 \chi^2 χ2 相关检验
假设有两个属性
A
,
B
A,\ B
A, B,
A
A
A 有
c
c
c 个不同值
a
1
,
a
2
,
⋯
,
a
c
a_1,\ a_2,\cdots,\ a_c
a1, a2,⋯, ac,
B
B
B 有
r
r
r 个不同值
b
1
,
b
2
,
⋯
,
b
r
b_1,\ b_2,\cdots,\ b_r
b1, b2,⋯, br。用
A
A
A 和
B
B
B 描述的数据元组可以用一个相依表显示,其中
A
A
A 的
c
c
c 个值构成列,
B
B
B 的
r
r
r 个值构成行。令
(
A
i
,
B
j
)
(A_i,\ B_j)
(Ai, Bj) 表示属性
A
A
A 取值
a
i
a_i
ai、属性
B
B
B 取值
b
j
b_j
bj 的联合事件,即
(
A
=
a
i
,
B
=
b
j
)
(A=a_i,\ B=b_j)
(A=ai, B=bj)。每个可能的
(
A
i
,
B
j
)
(A_i,\ B_j)
(Ai, Bj) 联合事件都在表中有自己的单元。
χ
2
\chi^2
χ2 值(
P
e
a
r
s
o
n
χ
2
Pearson\ \chi^2
Pearson χ2 统计量)可以用下式计算:
χ
2
=
∑
i
=
1
c
∑
j
=
1
r
(
o
i
j
−
e
i
j
)
2
e
i
j
(3.1)
\chi^2=\sum_{i=1}^c\sum_{j=1}^r\frac{{(o_{ij}-e_{ij})}^2}{e_{ij}} \tag{3.1}
χ2=i=1∑cj=1∑reij(oij−eij)2(3.1)
其中,
o
i
j
o_{ij}
oij 是联合事件
(
A
i
,
B
j
)
(A_i,\ B_j)
(Ai, Bj) 的观测频度(即实际计数),而
e
i
j
e_{ij}
eij 是
(
A
i
,
B
j
)
(A_i,\ B_j)
(Ai, Bj) 的期望频度,可以用下式计算:
e
i
j
=
c
o
u
n
t
(
A
=
a
i
)
×
c
o
u
n
t
(
B
=
b
j
)
n
(3.2)
e_{ij}=\frac{count(A=a_i)\times count(B=b_j)}{n} \tag{3.2}
eij=ncount(A=ai)×count(B=bj)(3.2)
其中,
n
n
n 是数据元组的个数,
c
o
u
n
t
(
A
=
a
i
)
count(A=a_i)
count(A=ai) 是
A
A
A 上具有值
a
i
a_i
ai 的元组个数,而
c
o
u
n
t
(
B
=
b
j
)
count(B=b_j)
count(B=bj) 是
B
B
B 上具有值
b
j
b_j
bj 的元组个数。
(
3.1
)
(3.1)
(3.1) 式中的和在所有
r
×
c
r\times c
r×c 个单元上计算。注意,对
χ
2
\chi^2
χ2 值贡献最大的单元是其实际计数与期望计数很不同的单元。
χ 2 \chi^2 χ2 统计检验假设 A A A 和 B B B 是独立的。检验基于显著水平,具有自由度 ( r − 1 ) × ( c − 1 ) (r-1)\times (c-1) (r−1)×(c−1)。
男 | 女 | 合计 | |
---|---|---|---|
小说 | 250(90) | 200(360) | 450 |
非小说 | 50(210) | 1000(840) | 1050 |
合计 | 300 | 1200 | 1500 |
利用 ( 3.2 ) (3.2) (3.2) 式,我们可以验证每个单元的期望频率。例如,单元 ( 男,小说 ) (男,小说) (男,小说) 的期望频率是 e 11 = c o u n t ( 男 ) × c o u n t ( 小说 ) n = 300 × 450 1500 = 90 e_{11}=\frac{count(男)\times count(小说)}{n}=\frac{300\times 450}{1500}=90 e11=ncount(男)×count(小说)=1500300×450=90,其他类似可得。使用计算 χ 2 \chi^2 χ2 的 ( 3.1 ) (3.1) (3.1) 式,可以得到 χ 2 = ( 250 − 90 ) 2 90 + ( 50 − 210 ) 2 210 + ( 200 − 360 ) 2 360 + ( 1000 − 840 ) 2 840 = 284.44 + 121.90 + 71.11 + 30.48 = 507.93 \chi^2=\frac{{(250-90)}^2}{90}+\frac{{(50-210)}^2}{210}+\frac{{(200-360)}^2}{360}+\frac{{(1000-840)}^2}{840}=284.44+121.90+71.11+30.48=507.93 χ2=90(250−90)2+210(50−210)2+360(200−360)2+840(1000−840)2=284.44+121.90+71.11+30.48=507.93。
对于这个 2 × 2 2\times2 2×2 的表,自由度 ( 2 − 1 ) ( 2 − 1 ) = 1 (2-1)(2-1)=1 (2−1)(2−1)=1。对于自由度 1 1 1,在 0.001 0.001 0.001 的置信水平下,拒绝假设的值式 10.828 10.828 10.828。因为 507.93 > 10.828 507.93>10.828 507.93>10.828,所以我们可以拒绝性别和阅读偏好独立的假设,并断言对于给定的人群,这两个属性式(强)相关的。
数值数据的相关系数
对于数值数据,我们可以通过计算属性
A
A
A 和
B
B
B 的相关系数(又称Pearson积矩系数),估计这两个属性的相关度
r
A
,
B
r_{A,B}
rA,B,
r
A
,
B
=
∑
i
=
1
n
(
a
i
−
A
ˉ
)
(
b
i
−
B
ˉ
)
n
σ
A
σ
B
=
∑
i
=
1
n
(
a
i
b
i
)
−
n
A
ˉ
B
ˉ
n
σ
A
σ
B
(3.3)
r_{A,B} =\frac{\sum_{i=1}^n(a_i-\bar A)(b_i-\bar B)}{n\sigma_A\sigma_B} =\frac{\sum_{i=1}^n(a_ib_i)-n\bar{A} \bar{B}}{n\sigma_A\sigma_B} \tag{3.3}
rA,B=nσAσB∑i=1n(ai−Aˉ)(bi−Bˉ)=nσAσB∑i=1n(aibi)−nAˉBˉ(3.3)
其中,
n
n
n 是数据元组的个数,
a
i
a_i
ai 和
b
i
b_i
bi 分别是元组
i
i
i 在
A
A
A 和
B
B
B 上的值,
A
ˉ
\bar A
Aˉ 和
B
ˉ
\bar B
Bˉ 分别是
A
A
A 和
B
B
B 的均值,
σ
A
\sigma_A
σA 和
σ
B
\sigma_B
σB 分别是
A
A
A 和
B
B
B 的标准差,
∑
i
=
1
n
(
a
i
b
i
)
\sum_{i=1}^n(a_ib_i)
∑i=1n(aibi) 是
A
B
AB
AB 叉积和(即对于每个元组,
A
A
A 的值乘以该元组
B
B
B 的值)。
注意, − 1 ≤ r A , B ≤ + 1 -1\le r_{A,B}\le +1 −1≤rA,B≤+1。① r A , B > 0 r_{A,B}>0 rA,B>0,则 A A A 和 B B B 是正相关的;② r A , B < 0 r_{A,B}<0 rA,B<0,则 A A A 和 B B B 是负相关的;③ r A , B = 0 r_{A,B}=0 rA,B=0,则 A A A 和 B B B 是独立的。该值越大,相关性越强(即每个属性蕴含另一个的可能性越大)。因此,一个较高的 r A , B r_{A,B} rA,B 值表明 A o r B A\ or\ B A or B 可以作为冗余删除。
数值数据的协方差
考虑两个数值属性
A
A
A 和
B
B
B 和
n
n
n 次观测的集合
{
(
a
1
,
b
1
)
,
⋯
,
(
a
n
,
b
n
)
}
\{(a_1,b_1),\ \cdots,\ (a_n,b_n)\}
{(a1,b1), ⋯, (an,bn)}。
A
A
A 和
B
B
B 的均值又分别称为
A
A
A 和
B
B
B 的期望值,即
E
(
A
)
=
A
ˉ
=
∑
i
=
1
n
a
i
n
,
E
(
B
)
=
B
ˉ
=
∑
i
=
1
n
b
i
n
.
E(A)=\bar A=\frac{\sum_{i=1}^na_i}{n},\ E(B)=\bar B=\frac{\sum_{i=1}^nb_i}{n}.
E(A)=Aˉ=n∑i=1nai, E(B)=Bˉ=n∑i=1nbi.
A
A
A 和
B
B
B 的协方差(covariance)定义为:
C
o
v
(
A
,
B
)
=
E
(
(
A
−
A
ˉ
)
(
B
−
B
ˉ
)
)
=
∑
i
=
1
n
(
a
i
−
A
ˉ
)
(
b
i
−
B
ˉ
)
n
(3.4)
Cov(A,B)=E((A-\bar A)(B-\bar B))=\frac{\sum_{i=1}^n(a_i-\bar A)(b_i-\bar B)}{n} \tag{3.4}
Cov(A,B)=E((A−Aˉ)(B−Bˉ))=n∑i=1n(ai−Aˉ)(bi−Bˉ)(3.4)
容易得到:
r
A
,
B
=
C
o
v
(
A
,
B
)
σ
A
σ
B
(3.5)
r_{A,B}=\frac{Cov(A,B)}{\sigma_A\sigma_B} \tag{3.5}
rA,B=σAσBCov(A,B)(3.5)
C o v ( A , B ) = E ( A ⋅ B ) − A ˉ B ˉ (3.6) Cov(A,B)=E(A\cdot B)-\bar A \bar B \tag{3.6} Cov(A,B)=E(A⋅B)−AˉBˉ(3.6)
元组重复
除了检测属性间的冗余外,还应当在元组级检测重复(例如,对于给定的唯一数据实体,存在两个或多个相同的元组)。
数据值冲突的检测与处理
来自不同数据源的属性值可能不同。这可能是因为表示、尺度或编码不同。
3.4 数据归约
数据归约策略概述
维归约(dimensionality reduction)
减少所考虑的随机变量或属性的个数。方法包括:
- 小波变换;
- 主成分分析;
它们把元数据变换或投影到较小的空间;
- 属性子集选择;
这种方法将不相关、弱相关或冗余的属性或维检测出来并删除。
数量归约(numerosity reduction)
参数方法:
- 回归和对数-线性模型;
非参数方法:
- 直方图;
- 聚类;
- 抽样;
- 数据立方体聚集。
数据压缩(data compression)
使用变换,以便得到原数据的归约或“压缩”表示。如果原数据能够从压缩后的数据重构,而不损失信息,则称该数据归约是无损的。如果我们只能近似重构原数据,则该数据归约称为有损的。
小波变换
- 一种线性信号处理技术,可用于处理多维数据。实际应用包括指纹图像压缩、计算机视觉、时间序列数据分析和数据清理;
- 离散小波变换(DWT)关键在于小波变换后的数据可以截断。仅存放一部分最强的小波系数,就能保留近似的压缩数据;
- 与离散傅里叶变换(DFT)相比,DWT是一种更好的有损压缩。即,对于给定数据的向量,在DWT和DFT保留相同数目系数的情况下,DWT能提供更准确的数据近似、需要的空间比DFT小、局部性更好有助于保留局部细节。
主成分分析
- 搜索最能代表数据的向量;
- 创建一个替换的、较小的变量集“组合”属性的基本要素;
- 常常揭示先前未曾察觉的联系。
属性子集选择
通过删除不相关或冗余的属性(或维)减少数据量。该方法的目标是找出最小属性集,使得数据类的概率分布尽可能地接近使用所有属性得到的原分布。该方法还减少了出现在发现模式上的属性数目,使得模式更易于理解。
属性子集选择的启发式方法
逐步向前选择
由空属性集作为归约集开,确定原属性集中最好的属性,并将它添加到归约集中。在其后的每一次迭代,将剩下的原属性集中最好的属性添加到该集合中。
逐步向后删除
由整个属性集开始,在每一步中,删除属性集中最差的属性。
逐步向前选择和逐步向后删除的组合
由整个属性集开始,在每一步中,删除属性集中最差的属性,同时选择一个最好的属性。
决策树归纳
当决策树归纳用于属性子集选择时,由给定的数据构造决策树。不出现在树中的所有属性假定是不相关的。出现在树中的属性形成归约后的属性子集。
在某些情况下,我们可能基于其他属性创建一些新属性。这种属性构造可以帮助提高准确性和对高维数据结构的理解。
回归和对数线性模型:参数化数据归约
在(简单)线性回归中,对数据建模,使之拟合到一条直线。例如,可以用以下公式,将随机变量
y
y
y(因变量)表示为另一随机变量
x
x
x(自变量)的线性函数,
y
=
w
x
+
b
(3.7)
y=wx+b \tag{3.7}
y=wx+b(3.7)
其中,假定
y
y
y 的方差是常量。在数据挖掘中,
x
x
x 和
y
y
y 是数值数据库属性。系数
w
w
w 和
b
b
b(回归系数)分别为直线的斜率和
y
y
y 轴截距。
对数线性模型(log-linear model)近似离散的多维概率分布。给定 n n n 维元组集合,我们可以把每个元组看作 n n n 维空间的点。对于离散属性集,可以使用对数线性模型,基于维组合的一个较小的子集,估计多维空间中每个点的概率。这使得高维数据空间可以有较低维空间构造。
直方图
直方图使用分箱来近似数据分布。如果每个桶指代别单个属性值/频率对,则该桶称为单值桶。通常,同表示给定属性的一个连续区间。
有一些划分规则,包括下面这些:
- 等宽:在等宽直方图中,每个通道宽度区间是一致的;
- 等频(或等深):在等频直方图中,每个桶的频率大致相同(即,每个桶呆滞包含相同个数的邻近数据样本)。
对于近似稀疏和稠密数据,以及高倾斜和均匀的数据,直方图都是非常有效的。
聚类
基于相似性将数据集划分为群或簇,并且仅存储聚类表示(例如,质心和直径)。
抽样
使用数据小得多的随机样本(子集)表示大型数据集。
假定大型数据集 D D D 包含 N N N 个元组。常用的抽样方法如下所示:
s s s 个样本的无放回简单随机抽样( SRSWOR \text{SRSWOR} SRSWOR)
从 D D D 的 N N N 个元组中抽取 s s s 个样本( s < N s<N s<N),其中 D D D 中任意元组被抽取的概率均为 1 / N 1/N 1/N,即所有元组的抽取是等可能的。
s s s 个样本的有放回简单随机抽样( SRSWR \text{SRSWR} SRSWR)
该方法类似于 SRSWOR \text{SRSWOR} SRSWOR,不同之处在于当一个元组从 D D D 中抽取后,记录它,然后放回原处。
簇抽样
将数据集进行分区,从每个分区中按比例抽取样本;例如,对全年级按照班级抽样。
分层抽样
将数据集按某属性划分为 “层”,对每一层抽样。例如,按照年龄抽样。当数据倾斜时抽样可以具有代表性。
采用抽样进行数据归约的优点:得到样本的花费正比例于样本集的大小 s s s,而不是数据集的大小 N N N。因此,抽样的复杂度可能亚线性(sublinear)于数据的大小。其他数据归约技术至少需哟完全扫描 D D D。对于固定的样本大小,抽样的复杂度仅随数据的维数 n n n 线性得增加;而其他技术,如直方图,复杂度随 n n n 呈指数增长。
数据立方体聚集
略
3.5 数据变化与数据离散化
数据变换策略概述
- 光滑(smoothing):去掉数据中的噪声。这类技术如分箱、聚类;
- 属性构造(特征构造):由给定属性构造新的属性;
- 聚集:对数据进行汇总或聚集。如聚集月销售量来计算年销售量;
- 规范化:将数据按比例缩放,使其落入特定区间,如 − 1.0 ∼ 1.0 -1.0\sim 1.0 −1.0∼1.0 或 0.0 ∼ 1.0 0.0\sim 1.0 0.0∼1.0;
- 离散化:将数值的原始值用区间标签代替,如年轻人、中年人、老年人;
- 由标称数据产生概念分层:属性,如 s t r e e t street street,可以泛化到较高的概念层,如 c i t y city city 或 c o u n t r y country country。
通过规范化变换数据
最小-最大规范化
最小-最大规范化对原始数据进行线性变换。假设
m
i
n
A
min_A
minA 和
m
a
x
A
max_A
maxA 分别为属性
A
A
A 的最小值和最大值。最小-最大规范化通过计算
v
i
′
=
v
i
−
m
i
n
A
m
a
x
A
−
m
i
n
A
(
n
e
w
_
m
a
x
A
−
n
e
w
_
m
i
n
A
)
+
n
e
w
_
m
i
n
A
(3.8)
v'_i=\frac{v_i-min_A}{max_A-min_A}(new\_max_A-new\_min_A)+new\_min_A \tag{3.8}
vi′=maxA−minAvi−minA(new_maxA−new_minA)+new_minA(3.8)
把
A
A
A 的值
v
i
v_i
vi 映射到区间
[
n
e
w
_
m
i
n
A
,
n
e
w
_
m
a
x
A
]
[new\_min_A,new\_max_A]
[new_minA,new_maxA] 中的
v
i
′
v_i^{'}
vi′。
最小-最大规范化保持原始数据之间的联系。如果今后输入实例落在 A A A 的原数据值域之外,则该方法将面临 “越界” 错误。
z z z 分数( z − s c o r e z-score z−score)规范化
或零均值规范化,属性
A
ˉ
\bar A
Aˉ 的值基于
A
A
A 的均值和标准差规范化。
A
A
A 的值
v
i
v_i
vi 被规范化为
v
i
v_i
vi,由下式计算:
v
i
′
=
v
i
−
A
ˉ
σ
A
(3.9)
v'_i=\frac{v_i-\bar A}{\sigma_A} \tag{3.9}
vi′=σAvi−Aˉ(3.9)
其中,
A
ˉ
\bar A
Aˉ 和
σ
A
\sigma_A
σA 分别是属性
A
A
A 的均值和标准差。
小数定标
假设 A A A 的取值由 − 986 ∼ 917 -986\sim 917 −986∼917。 A A A 的最大绝对值为 986 986 986。因此,为使用小数定标规范化,我们用 1000 1000 1000(即 j = 3 j=3 j=3)除每个值。因此, − 986 -986 −986 被规范化为 − 0.986 -0.986 −0.986,而 917 917 917 被规范化为 0.917 0.917 0.917。
数据离散化
离散化:将连续属性的范围划分为区间,区间的标签可用于替换实际数据值。通过离散化可以减少数据量。
三种可以离散化的属性:
- 名称,例如名字、颜色;
- 序数,有序集合中的值,如等级;
- 数字。
离散化方法
分箱
等宽
- 将范围划分为 N N N 个长度相等的区间;
- 如果 A A A 和 B B B 是该属性的最低值和最高值,则区间的宽度将为 W = ( B – A ) / n W =(B–A)/n W=(B–A)/n;
- 最简单明了,但异常值可能会导致分区不合理;
- 不能较好的处理倾斜数据。
等深
- 将数据分为 N N N 个区间,每个区间包含大约相同数量的样本;
- 合理的数据划分,但不好处理区间的类别标签。
聚类
- 将数据按照某一属性 A A A 划分为簇,聚类算法可以用来离散化数值 A A A;
- 遵循自底向上的无监督划分。
决策树
- 构建决策树进行离散化,见第八章;
- 自顶向下进行有监督划分。
相关性分析
- 基于相关性度量(如 χ 2 \chi^2 χ2 系数)进行数据划分;
- 自底向上的无监督划分。
标称数据的概念分层产生
- 将地理位置、工作类别和商品类型等属性进行概念分层;
- 概念层次可以由领域专家和/或数据仓库设计者明确指定;
- 可以根据数量自动形成概念层次。