第2章 数据预处理
2.1 数据类型有哪些?
面试官:所谓数据挖掘,常见的数据类型有哪些呀?
程序员大树:
根据数据属性的不同,通常可以把数据分为离散和连续两类。离散属性是有有限个值或无限可数个值。比如电话号等。连续属性是取实数的值,如温度、高度等,可以用浮点数来表示。
数据集是数据挖掘的基础。数据集分为记录数据、图数据和有序数列。记录数据包含了数据维度和指标等记录,通常用关系数据库存储,或者矩阵存储。特别地,对于文档这种较稀疏的,可以转成词向量,用稀疏矩阵存储。
图数据,即用图来表示数据间的关系,如地图数据等。
有序数列,即数据属性具有时间或空间上的联系。如一些股票等金融时序数据。
2.2 怎么保证数据质量?
面试官:你在数据挖掘之前,如何保证数据质量?
程序员大树:大概有两个方面可以着手:数据清理,以及使用容忍低质量数据的算法。数据清洗需要解决的问题有噪声、异常值、遗漏值、重复数据等。
噪声一般包含时间或空间分量的数据,可以采用信号或图形处理的技术降低噪声。很多数据挖掘算法在实现时都会关注鲁棒性,即噪声干扰下也可以产生能够接受的结果。
异常值,即离群点,与其他数据对象显著不同的点。在做统计分析时,需要对异常值进行处理,比如统计某地平均收入,就要剔除掉马云之类的高收入人群,才会有普遍性。
遗漏值,在收集数据时可能会出现一个对象缺少几个属性值的情况。处理遗漏值,可以进行简单的估计。比如对连续数据,可以用近邻点的平均值;如果是离散的,可以用最近邻点的属性值。当然,在遗漏值占比比较少时,做数据分析时也可以忽略掉遗漏值。
重复数据,数据集可能包含重复的数据对象。去重包含两方面,一方面是一个对象有多个值,即如果有两个对象实际只代表同一个对象,而他们的属性值不同,则必须处理不一致的值。另一方面是有多个重复或者相似的值,需要把他们合并在一起。
2.3 数据预处理步骤有哪些?
面试官:说说数据预处理是怎么做的?
程序员大树:
数据预处理有两个目的,即筛选出分析的数据对象,以及提升数据质量。预处理有如下过程:
(1)数据清洗:可以用来清除数据中的噪声,纠正不一致。 (2)数据集成:将数据由多个数据源合并成一个一致的数据存储,如数据仓库。
(3)数据归约:可以通过如聚集、删除冗余特征或聚类来降低数据的规模。
数据归约常用到的是维归约。自然界收集到的数据可能会有成千上万个维度,进行挖掘时特别复杂,我们可以将旧的维度合并在一起,或者删除不相关的维度,以达到规约的目的。维规约可以用到主成成分分析的技术,后面会讲到。
(4)数据变换:数据变换包括对数据进行规范化,离散化,稀疏化处理。常见的规范化有以下几种:
I. 最大 - 最小规范化:将数据映射到[0,1]区间,。
Ii. z-score变换:用于将数据变换为正态分布
Iii. 对数变换:对数变换能够缩小数据的绝对范围
2.4 如何度量相似性和相异性?
面试官:请你说说怎么度量相似性和相异性?
程序员大树:对于相异性: (1)欧几里得距离:如果一个点有多个属性值,如x={x1,x2...xk}, y={y1,y2...yk},欧几里得距离可以写成:
(2)闵可夫斯基距离:p = (x1,x2,,,,xn), q = (y1,y2,,,,yn), 闵可夫斯基距离可以写成:
首先设x,y是两个二元向量。记:
f00=x取0且y取0的属性个数;
f01=x取0且y取1的属性个数;
f10=x取1且y取0的属性个数;
f11=x取1且y取1的属性个数。
(1)简单匹配系数SMC:
(2) Jaccard系数J:
(3)余弦相似度:可以忽略0-0的匹配,而且还能够处理非二元的向量。