——“低质量的数据将导致低质量的挖掘结果。”
1.1 数据质量
数据质量涉及到许多因素,包括准确度、完整性、一致性、时效性、可信性和可解释性。
1.2 数据预处理的主要任务
数据预处理的主要步骤,即
2.1 缺失值
对于处理数据中的缺失值有以下几个方法:
(1) 忽略元组:适用于分类的挖掘任务缺少类标号时,当元组有多个属性缺少值,而且每个属性缺失值的百分比变化很小。可以采用忽略元组的方法。注意该元组剩余的属性值也不能被使用。
(2) 人工填写缺失值:方法费时,且不适用于大规模数据集。
(3) 使用一个全局常量填充缺失值:方法简单,但不可靠。
(4) 使用属性的中心度量(均值或中位数)填充缺失值:对于正常对称的数据分布,使用均值,对于倾斜数据则使用中位数。
(5) 使用与给定元组同一类的所有样本的属性均值或中位数
(6) 使用最可能的值填充缺失值:可以采用回归,贝叶斯法以及决策树等推理出缺失值。该方法最为常用,原因在于它使用已有数据的大部分信息来预测缺失值。
2.2 噪声数据
去除噪声,光滑数据方法:
(1) 分箱:通过考察数据的“近邻”(即周围的值)来光滑有序数据的值。这些有序的值被分布到一些桶或箱中,进行局部光滑。可以采用箱均值光滑、箱中位数光滑以及箱边界光滑。
(2) 回归:用一个函数拟合来光滑数据。线性回归,找出拟合两个属性的最佳直线,使得一个属性可以用来预测另一个。多元线性回归涉及的属性多于两个,数据拟合到一个多维平面上。
(3) 离群点分析:通过聚类来检测离群点,聚类将类似的值组织成群或“簇”,那些落在簇集合之外的值被视为离群点。
3.1 冗余和相关分析
如果一个属性能由另一个或另一组属性“导出”,则这个属性可能是冗余的。有些冗余可以通过相关分析检测到,给定两个属性可以根据可用的数据,度量一个属性能在多大程度上蕴含另一个。
(1)标称属性的 χ2 χ 2 (卡方)相关检验
假设属性A有c个不同值 a1,a2,...,ac a 1 , a 2 , . . . , a c ,属性B有r个不同值 b1,b2,...,br b 1 , b 2 , . . . , b r 。A和B的元素构成一个矩阵表 (c×r) ( c × r ) ,令 (Ai,Bi) ( A i , B i ) 表示属性A取值 ai a i ,属性B取值 bj b j 的联合事件,即 (A=ai,B=bj) ( A = a i , B = b j ) 。则 χ2 χ 2 值(Pearson χ2 χ 2 统计量)可以用下式计算:
(2) 数值数据的相关系数
对于数值属性的数据,可以直接计算相关系数来度量两个属性之间的相关性,计算A和B的相关系数(Pearson积矩系数)如下:
(3) 数值数据的协方差
考虑两个数值属性A、B和n次观测集合 {(a1,b1),...,(an,bn)} { ( a 1 , b 1 ) , . . . , ( a n , b n ) } 则A和B的协方差(covariance)定义为:
数据归约策略包括维归约、数量归约和数据压缩:
4.1 小波变换(DWT)
对向量 X X 进行小波变换,会生成不同数值的小波系数构成向量 X′ X ′ ,原向量和变换后的向量具有相同的长度。小波变换后的数据可以截短,仅存放一小部分最强的小波系数,就能保留近似的压缩数据。例如,保留大于某个阈值的小波系数,其他系数置为0,则结果数据会变得很稀疏,在小波空间进行计算将会非常快,同时也能在一定程度上消除噪声,而不会光滑掉数据的主要特征,给定一组小波系数,使用逆小波变换,可以构造原数据的近似。小波变换的步骤如下图:
4.2 主成分分析
主成分分析(principal components analysis PCA) 法,又称Karhunen-Loeve(K-L方法)法,搜索 k k 个最能代表数据的 n n 维正交向量,其中 k⩽n k ⩽ n 。这样,原数据就能投影到一个小得多的空间上,达到降维的效果。基本过程如下:
对数据规范化,一般将每个属性值归一化落入[0, 1]区间内。
PCA计算k个标准正交向量,作为规范化输入数据的基,这些单位向量相互正交,是为主成分。输入数据是主成分的线性组合。
对主成分按”主要性”一般是对应特征值大小降序排列,主成分本质上充当数据的新坐标系,提供关于方差的信息。即对坐标轴进行排序,使得第一个坐标轴显示数据的最大方差,第二个显示数据的次大方差。
去除较弱的成分(即方差较小的那些)来归约数据,使用最强的主成分能够重构原数据达到很好的近似。与小波变换相比,PCA能够更好地处理稀疏数据,而小波变换更适合高维数据。
(1)二维空间的PCA主成分分析法推导:
原始数据在 X1−X2 X 1 − X 2 的坐标空间,接着为了方便计算自协方差矩阵进行(归一化?)规范中心化(即将所有点的均值中心放在原点):
设数据点 X X 与自身的协方差为 S(X) S ( X ) 则: S(X)=1n−1XXT S ( X ) = 1 n − 1 X X T ,对原数据点进行一个坐标变换,去除每个数据点之间的相关性。则变换后的坐标轴即为Y1和Y2,代表两个主成分。设坐标变换为: Y=PX Y = P X 则,变化后的数据点的协方差矩阵为:
对于坐标系,原坐标系是以原来的两个属性 X1 X 1 和 X2 X 2 为横纵坐标轴,而得到的新的坐标轴 Y1 Y 1 和 Y2 Y 2 即为映射的特征空间“属性”。其中 Y1 Y 1 和 Y2 Y 2 的方向向量分别是原坐标系下的 S(X)=1n−1XXT S ( X ) = 1 n − 1 X X T 的特征向量(对应的特征值 λ1>λ2 λ 1 > λ 2 )。
最后一步也就是降维,一般我们取较大的特征值对应的特征向量为主向量,忽略较小特征值对应的特征向量(也就是所谓的最大方差准则?),然后让主向量去加权对应相乘原始的两个属性数据结果得到一组数据(即原始的两个属性映射到了一个主“特征属性”上去了),从而达到降维的目的。
至于最后一步怎么乘的,假设取前 k k 个特征值对应的 n n 维特征向量排成一个矩阵,则矩阵的大小为 k×n k × n ,假设原始 n n 个属性数据每个属性有 m m 个值,则可以组成数据矩阵大小为 n×m n × m ,前后两个矩阵相乘得到大小为 k×m k × m 的 k k 个属性每个属性 m m 个值的新数据矩阵,从而达到降维的目的。
总结:所谓主成分分析法也就是将原始的 n n 个属性,映射到一个特征空间上,得到 n n 个彼此不相关的特征属性,然后取前 k k 个较大的特征值对应的特征向量为主成分方向向量,最后用 k k 个向量与原始 n n 个数据属性相乘得到 k k 组新的属性数据,使得数据由 n n 维降至 k k 维。
(2) 另一个角度理解PCA
假设二维空间分布一个点集合,然后寻找一个向量使得所有点到这个向量的距离(即点在向量上的投影与自身的距离)之和最小。得到的这个向量能描述这个点集合的大致分布方向。
如上图,取点集合 {x1,x2,...,xn} { x 1 , x 2 , . . . , x n } 中的一个点 xk x k ,假设要求的方向向量为 e e , xk x k 在 e e 上的投影为 x′k x k ′ ,则 xk x k 到 x′k x k ′ 距离的平方为 ||x′k−xk||2 | | x k ′ − x k | | 2 ,则可以得到整个点集合到向量 e e 的距离之和约束函数为:
(3) 用python实现二维PCA简例
import numpy as np
import matplotlib.pyplot as plt
N = 10000 # 设置点的个数
s = np.array([[1, 0.8], [0.8, 1]]) # 创建一个协方差矩阵s
# print(s)
mean = (0, 0) # 二维高斯随机分布的均值,便于计算协方差矩阵
x = np.random.multivariate_normal(mean, s, N) # 产生两行N列的二维高斯随机序列,一行代表一个属性,每个属性有N个随机高斯数值
# 对x的协方差矩阵s进行特征值分解
a, b = np.linalg.eig(s) # 其中a是两个特征值列表,b是两个特征向量组成的矩阵
# 取最大的特征值所对应的特征向量,返回一个坐标
dx, dy = 3 * b[:,0]
plt.style.use('ggplot')
fig = plt.figure()
ax = fig.add_subplot(111)
for spine in ['left', 'bottom']:
ax.spines[spine].set_position('zero') # 将坐标轴移动至原点
plt.plot(x[:, 0], x[:, 1], '.', markersize=2, alpha=0.6) # 绘制散点图
# 在图绘制特征向量箭头
ax.arrow(0, 0, dx=dx, dy=dy, color='black', width=0.1)
ax.grid(True, color='g', linewidth=0.5, linestyle='-.')
ax.axis('equal') # 坐标轴成正比
plt.show()
fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
principleX = np.dot(x, b[:, 0]) # 这里计算最大特征值对应得特征向量与原始数据相乘得到一个一维数据即主成分
ax2.hist(principleX, 50, color='r', alpha=0.5) # 所谓主成分即一个分布的协方差矩阵进行特征值分解,求最大的特征值所对应的特征向量,然后将该分布乘以这个特征向量得到主成分
plt.show()
4.3 属性子集选择
属性子集选择又称特征子集选择,通过删除不相关或者冗余的属性,找出最小特征子集,使得数据类的概率分布尽可能地接近使用所有属性得到原分布。
对于 n n 个属性,有 2n−1 2 n − 1 个可能的子集,故当 n n 比较大时不能用穷举法,通常使用压缩搜索空间的启发式算法(贪心算法)。“最好的”(和“最差的”)属性通常使用统计显著性检验来确定。这种检验假定属性是相互独立的。属性子集选择的启发式算法如下图示意:
4.4 回归和对数线性模型:参数化数据归约
(1) 线性回归
在线性回归中,假设两个随机变量 x x (自变量)和 y y (因变量),假设二者满足线性关系:
(2) 对数线性模型(logistic逻辑回归)
逻辑回归可以参考逻辑回归(logistic regression)的本质——极大似然估计
5.1 数据规范化
原始数据的度量单位可能会影响数据分析,规范化数据赋予所有属性相等的权重。对于涉及神经网络的分类算法或基于距离度量的分类(如最邻近)和聚类,规范化特别有用。
设数值属性 A A 有 n n 个观测值 v1,v2,...,vn v 1 , v 2 , . . . , v n ,分别用以下三种方式进行规范化。
(1) 最小-最大规范化
假设 minA m i n A 和 maxA m a x A 分别为属性 A A 的最小值和最大值,则最小-最大规范化计算为:
(2) z分数规范化
z分数规范化(零均值规范化)中,属性 A¯ A ¯ 的值基于 A A 的均值和标准差规范化。 A A 的值 vi v i 被规范化 v′i v i ′ :
(3) 小数定标规范化
小数定标规范化通过移动属性 A A 的值的小数点位置进行规范化,小数点移动的位数依赖于 A A 的最大绝对值。 A A 的值 vi v i 被规范化为 v′i v i ′ :
数据挖掘概念与技术(第三版)