数据挖掘:概念与技术(第三版)之第三章的学习记录

来源:互联网 发布:win7原版优化 编辑:程序博客网 时间:2024/05/18 03:42

数据预处理

本章主要讲的是数据预处理。正如我在第一章里给出的KDD的流程一样,在数据的预处理中,需要做数据清理、数据集成、数据归约、数据变化等操作。这里需要强调的一点的是,这些步骤并不是完全孤立的。意思就是说我们在做数据清理的时候可能也相当于做了一部分的数据归约和集成,并不是我对对数据进行清理的时候,数据就真的只被清理了,实际上数据同时也被归约了或者集成了。
这里在总结一下这几步的作用

数据清理可以用来清楚数据中的噪声,纠正不一致;数据集成数据集成将数据由多个数据源合并成一个一致的数据存储,如仓库;数据归约数据归约可以通过如聚集、删除冗余特征或聚类来降低数据的规模数据变换可以把数据压缩到较小的区间,如0.0到1.0.这可以提高涉及距离度量的挖掘算法的准确率和效率。实际上,就是把数据进行处理变换,使之便于进行KDD。

数据清理

如何处理数据缺失值?

处理数据缺失值通常有以下6种做法

1.忽略它如果你的KDD涉及到进行分类,那么你可以把这个“无人认领”的元组给删除。其他情况,除非这个元组真的差了很多很多的属性值,否则还是尽量不要忽略它。2.人工填写缺失值不常用。3.使用一个全局常量填充缺失值比如,将缺失的值用Unknown来进行全局变化。但有意思的是,我们的本意是用Unknown来标志那些缺失的值,但是一但我们进行了全局替换,KDD统计到全局中有这么多的Unknown,它竟然会把它当成一种趋势,这尼玛就很尴尬了。所以,这个基本也不用。4.使用属性的均值或者中位数填充缺失值这个可以理解吧,但缺点是平均化可能会丧失该元组的个性化。5.使用与给定元组同一类的所有样本的属性均值或中位数这个稍微要精确一些,因为它把样本精确到了同一类来。但同样的,平均化可能会丧失该元组的个性化。6.使用最可能的值填充缺失值这种方法就是基于推理来预测缺失的值。这种做法最科学,因此使用也最广泛。在后面的章节,会对使用的推理预测模型进行讲解的

这里需要特别注意的是,不是所有的缺失值都是错误的。比如说驾照 ,有些人就是没有啊,所以只好空着。但你不能说他的数据是有误的。

如何处理噪声数据?
所谓噪声数据就是我们不感兴趣的数据或者说与我们挖掘任务无关的数据。注意噪声数据不一定是异常数据。
而清楚噪声所用的技术我们通常称之为数据光滑技术。
数据光滑技术有分箱、回归、离群点分析这么三种。

数据光滑用箱均值光滑、用箱中位数光滑、用箱边界光滑回归根据趋势拟合出一条曲线,所有在曲线外的数据全部舍掉(这个真的不是很确定是不是我这样理解的)离群点分析进行聚类分析,所有在聚合簇之外的点被视为噪声点。

书上,在末尾一段,特别提到了这么一句话“许多数据光滑的方法也用于数据离散化和数据归约”。

数据清理具体怎么进行操作?
前面说了怎么处理缺失值和噪声数据,那么数据清理到底该咋做?实际上很简单,已经有现成的数据清理工具了,我们在实际使用的时候,只需要使用这个工具便可以进行数据清理了。
首先我们需要明确的是,数据清理同KDD一样,也是一个过程。不是说一次就能完成的事情。而且,做到最后你会发现,你项目中的一大半的时间都花费在数据的清理上,并且最后得到的结果与你提供的数据的质量有非常非常大的关系!!!!甚至可以说,只要你数据处理好了,最好选择什么样的算法都是差不多的。所以,关于数据清理是一个过程这一点,请务必要放在心上。以后做项目跑不出来恰当的东西,一定要看看是不是自己的数据清理没有到位。

OK,数据清理其实总共就分为两步。第一步,发现偏差;第二步,纠正偏差。(ps:这里说的偏差就是缺失值呀,噪声数据呀,编码异常的数据呀,乱七八糟的数据呀)。
关于具体的工具及其使用,这里暂且放下。

数据集成
数据挖掘通常需要合并来自多个数据存储的数据,其中数据语义的多样性和结构对数据的集成提出了巨大的挑战。实际上在数据集成的时候会遇到下面这些问题,这些问题的解决会涉及到前面的数据清理。

实体识别问题
何为实体识别,实际上就是在数据集成中,在面对来自不同数据源的数据时,如何能正确,有效,等价的把他们进行“匹配”?
例如,两个数据库中,名字相同的字段可能代表的是两个不同的数据;又比如,两个名字不同的字段可能代表的又是一个相同的数据。诸如此类的问题,都是需要在数据集成中解决的。
实际上,我认为关于实体识别的问题会牵扯到NLP的问题,要规避这个问题最好的做法是在前期生成数据之时就严格按照规矩来,这里数据清理方便,数据集成也方便。但实际上,我们可以想得到,除了自己采集大量数据并自己进行挖掘的企业有条件这样做(比如今日头条等),其他的诸如银行等都不可能达到这样苛刻的条件,更不要说使用社会上的数据进行混合挖掘了。这是 属于历史的遗留问题,在以后会逐渐得到重视并解决,但目前,我们面临的仍是乱七糟八,杂乱无章的数据。

数据冗余问题
在集成数据的时候,我们通常会发现一个属性的数据可以被另一个属性的数据“导出”,那么这组数据就是冗余的。
举个例子,在数据库中,我们存储了性别,生日,地址,身份证号等属性。但实际上我们知道,只要晓得了身份证号,其他几个都是能够被“导出”的。因此,我们认为性别,生日,地址这些属性是冗余的。
检测数据是否冗余我们可以通过相关分析来检测到。
这里的相关分析实际上就是分析两个属性之间的包含性,如果包含性越高 ,就意味着一个属性能够被另一个属性导出,那么这个属性就是冗余的,我们需要对它进行处理。

对于相关分析来说,我们通常对不同的属性进行不同的操作。

标称属性卡方检验数值属性相关系数和协方差

关于标称属性的相关性检测是采用卡方检验。书上给出了一个例子,照着这个例子进行计算,不难得出结果。但我们疑惑的是为什么可以用卡方检验来做这个东西?我翻看了概率论与数理统计的教材,上面关于卡方分布的讲解仅限于理论上的,毫无实际意义。不得已,在网上进行查询,最后还是得出了结论。
实际上,卡方检验简单来说就是检验实际的数据分布情况与理论的分布情况是否相同的假设检验方法。这里大家可以看到,我提到了两个东西 ,一个是实际的数据分布情况,一个是理论的分布情况。实际的分布情况就是我们实际计算出来的;而理论的分布情况就是我们查卡方表得到的。如果说我们计算出来的卡方值大于了理论的临界值,那么我们就拒绝假设。(这里我们假设的是A和B独立,拒绝假设就说明他们之间有关系,不独立)。实际上,无论是t检验,f检验,卡方检验都是检验某个假设是否成立的。
关于卡方检验,来看这样一个例子:

卡方分布是n个独立随机变量的平方和的分布规律。

特点是当n增加时,分布曲线趋向于左右对称。

对此的理解:

如学生按指定的鼓点走队,假设每个学生的节奏感都差不多,且彼此不会互相影响(独立);当只有一个人走时通常走得很好,但随着人数增多,会发现整体的步伐越发显得凌乱,在每个时刻都能看到处于各种步态的学生,鼓点似乎失去了作用。实际上,每个人都在按照鼓点的指示走队,而且对每个人而言,迈错步伐的情况都是很少的,之所以整体队伍会显得凌乱,是因为很多人同时走队相当于增大了整体上出错的几率(只要一个人出现错误则整个队伍就显得不齐);如果一个人平均每走100步会走错一次,那么100个人就几乎每步都会有人出错。

卡方分布揭示出:随着系统变量的增多,随机误差对系统的影响将增大,单个变量所遵循的分布律对系统的影响将减小,导致概率密度极值点右移。

卡方分布判断变量相关性:卡方分布律的前提是各变量彼此独立,平方和的涨落只取决于随机误差,因此若观测变量平方和比相同自由度的卡方值过大或过小,则变量间的独立性就值得怀疑了。如上面的例子,若给学生队列分配一个教官,负责统一指挥大家的步调,那么可以预见队列步伐会整齐很多,但这是学生彼此失去独立性,而是通过教官的指令联合成一个整体。
参考文章:
卡方检验原理与应用实例
关于对卡方分布的理解

关于数值属性的相关性检测我们是通过计算他们之间的相关系数或者协方差来做的。
其中计算相关系数,书上已经给出了对应的公式,也比较好理解,这里就不多说了。值得注意的是,两个数值属性的相关性并不代表它们之间有因果关系(只能说它们之间存在某种联系)。关于这一点,需要进行分析才能知道。比如商场数与盗窃数成正相关,这并不能说明商场和盗窃之间有任何关系,要解释这个我们还需要引入第三个变量,人。实际上,相信大家也看到过国家统计局公布的一系列数据,其中有很多就是用这种数值之间的相关性来揭示社会,民生问题的。
而对于协方差,实际上考察的是两个属性如何一起变化。这个很好理解,直接按照给定公式计算就行了,这里不多说了。

数据归约
在重复一下数据归约的概念。数据归约就是指在尽可能保持数据原貌的前提下,最大限度地精简数据量。其中数据归约具体使用的策略包括维归约,数量归约和数据压缩。下面我们依次来说。

维归约

维归约的主要策略就是减少所考虑的随机变量或属性的个数。具体技术包括:小波变换(把原数据变换或投影到较小的空间)主成分分析(把原数据变换或投影到较小的空间)属性子集选择(其中不相关、弱相关或冗余的属性(或维)被检测和删除)

小波变换
实际上小波变化做的就是对数据进行压缩,具体的看书上。但实际上,我觉得把小波变化作为一种维归约方法不太贴切。

主成分分析
顾名思义,把最主要的提出来,这样自然而然的对数据进行了归约。从理论上来说主成分分析,是考察多个变量间相关性一种多元统计方法,研究如何通过少数几个主成分来揭示多个变量间的内部结构,即从原始变量中导出少数几个主成分,使它们尽可能多地保留原始变量的信息,且彼此间互不相关。也就是说,假如最后用向量表示的话,那么这些向量之间应该是线性无关的。在实际中,取方差最大的为第一主成分,次大的为第二主成分,以此类推。实际上,我们可以看到,主成分分析说白了就是一种降维。

属性子集选择
这个书上讲的很详细,不多说。
还可以看一下这篇文章
Weka-选择属性

数量归约
数量归约就是用替代的、较小的数据表示形式替换原数据。具体分为参数方法和非参数方法、

参数方法回归对数-线性模型非参数方法直方图聚类抽样数据立方体聚集

这几类方法,书上讲得都比较好理解。这里不展开,只是我对一些问题还存有疑惑,这里记录下
1.线性回归如何进行数据归约呢??
线性回归就是根据数据来拟合一条线嘛。这个如何进行数据归约呢?是把所有不在图像上的数据全部舍去嘛吗?如果这样的话,那么拟合的粒度又是多少呢?还是说所有的数据全部替换成线性函数呢?
(这里的理解不够深刻,所以会有疑问。关于回归更新如下:
对于传统模型来说,线性回归就是找出一条拟合数据的直线。在了解了支持向量回归之后,明白了直线是可以有宽度的,只要落在这个宽度之内的点,都算是正确的。)

数据变换
数据变换的意思是将数据变换成统一的格式,使得挖掘过程更有效,挖掘的模式可能更容易理解。而数据离散化是一种数据变换形式。

数据变化所采用的策略光滑:去掉噪声数据。具体包括分箱、回归、聚类属性构造:由给定的属性构造出新的属性并添加到属性集中(如前面说的地址,性别,生日可以构造成身份证)聚集:对数据进行汇总或聚集 (如可以聚集每天的数据,来计算每个星期,每个月的数据。实际上,我们应该很容易与数据立方体联想到一起。上钻操作正好就是聚集的一种体现。)规范化:把属性按比例进行缩放离散化:首先要搞清楚什么是离散化。通俗的来说,离散化就是在不改变数据相对大小(注意这里我说的是相对大小而不是绝对大小)的情况下,对数据进行相应的缩小。因此,各种乱七八糟的数据可以用区间标签(0~10,0.0~1.0)来替换,也可以用概念标签来替换(小、中、大)来替换。并且在此之上,还可以进行组织替换。书上图3.12给出了一个例子。由标称数据产生概念分层:实际上我认为这个用上钻和下探的思想去理解它更好。

其实大家可以看到,这里的这些操作有很多已经在前面的数据清理啊,数据集成中出现过了。所以在开篇,我便提到了,这些步骤并不是完全孤立的。

下面我们着重讨论下后面三种数据变换的策略。

规范化
P74,3.5.2
书上给了三种方法,分别是最小-最大规范化、z分数规范化、按小数定标规范化。
这个书上写得很详细,不多说了。

离散化
书上详细讲解了分箱离散化、直方图分析离散化以及通过聚类、决策树和相关分析离散化这几种技术,也比较好理解。

由标称数据产生概念分层
这个以我目前的认识,我认为由标称数据产生概念分层目前或多或少还是需要人工的介入。立个Flag先,哈哈。希望我的这个论断是对的。
书上说的也很清楚,就不多说了。

阅读全文
1 0
原创粉丝点击