前言
在介绍了数据挖掘的一般流程、常用方法、应用功能和数据可视化之后,在本篇博文中,笔者想要分享一些在数据挖掘开始之前要做的一些事——数据预处理。在第二部分中,笔者整理了数据挖掘中的十大经典算法,与读者们共享。两部分分别从《数据挖掘中数据预处理的方法与技术》一文与网络中引用而来,作为自己和读者朋友们的学习笔记。在第三部分阶段小结中,笔者对近期的学习进行了阶段性的总结。
一、数据预处理
现实中数据大多数都是不完整、不一致的,无法直接进行数据挖掘,或直接影响了挖掘结果。为了提高数据挖掘质量和数据挖掘效率,产生了数据预处理技术。对数据进行预处理,不但可以节约大量的空间和时间而且得到的挖掘结果能更好地起到决策和预测作用。数据预处理一般包括:数据清理,数据集成,数据变换,数据归约等方法。这些数据预处理技术根据数据挖掘项目的需要和原始数据的特点,在数据挖掘之前有选择的单独使用或综合使用,可大大提高数据挖掘模式的质量,降低实际挖掘所需要的时间。数据预处理技术整理如下:
1、数据清理
数据清理是数据预处理中最花费时间、最乏味的,但也是最重要的一步。该步骤可以有效地减少学习过程中可能出现相互矛盾的情况。数据清理主要处理缺失数据,噪声数据,识别、删除孤立点。数据清理的基本方法有:
(1)缺失数据处理:目前最常用的方法是使用最可能的值填充缺失值,比如可以用回归、贝叶斯形式化方法工具或判定树归纳等确定缺失值。这类方法依靠现有的数据信息来推测缺失值,使缺失值有更大的机会保持与其他属性之间的联系。还有其他一些方法来处理缺失值,如用一个全局常量替换缺失值、使用属性的平均值填充缺失值或将所有元组按某些属性分类,然后用同一类中属性的平均值填充缺失值。如果缺失值很多,这些方法可能误导挖掘结果。如果缺失值很少,可以忽略缺失数据。
(2)噪声数据处理:噪声是一个测量变量中的随机错误或偏差,包括错误的值或偏离期望的孤立点值。目前最广泛的是应用数据平滑技术处理,具体包括:
分箱技术,将存储的值分布到一些箱中,用箱中的数据值来局部平滑存储数据的值。具体可以采用按箱平均值平滑、按箱中值平滑和按箱边界平滑;
回归方法,可以找到恰当的回归函数来平滑数据。线性回归要找出适合两个变量的“最佳”直线,使得一个变量能预测另一个。多线性回归涉及多个变量,数据要适合一个多维面;
计算机检查和人工检查结合方法,可以通过计算机将被判定数据与已知的正常值比较,将差异程度大于某个阈值的模式输出到一个表中,然后人工审核表中的模式,识别出孤立点;
聚类技术,将类似的值组织成群或“聚类”,落在聚类集合之外的值被视为孤立点。孤立点可能是垃圾数据,也可能为我们提供重要信息。对于确认的孤立点垃圾数据将从数据库中予以清除。
2、数据集成
数据集成就是将多个数据源中的数据合并存放在一个同一的数据存储(如数据仓库、数据库等)的一种技术和过程,数据源可以是多个数据库、数据立方体或一般的数据文件。数据集成涉及3个问题:
模式集成。涉及实体识别,即如何将不同信息源中的实体匹配来进行模式集成。通常借助于数据库或数据仓库的元数据进行模式识别;
冗余数据集成。在数据集成中往往导致数据冗余,如同一属性多次出现、同一属性命名不一致等。对于属性间冗余,可以先采用相关性分析检测,然后删除;
数据值冲突的检测与处理。由于表示、比例、编码等的不同,现实世界中的同一实体,在不同数据源的属性值可能不同。这种数据语义上的歧义性是数据集成的最大难点,目前没有很好的办法解决。
3、数据变换
数据变换是采用线性或非线性的数学变换方法将多维数据压缩成较少维数的数据,消除它们在时间、空间、属性及精度等特征表现方面的差异。这方法虽然对原始数据都有一定的损害,但其结果往往具有更大的实用性。常见数据变换方法如下:
数据平滑:去除数据中的噪声数据,将连续数据离散化,增加粒度。通常采用分箱、聚类和回归技术。
数据聚集:对数据进行汇总和聚集。
数据概化:减少数据复杂度,用高层概念替换。
数据规范化:使属性数据按比例缩放,使之落入一个小的特定区域;常用的规范化方法有最小---最大规范化、z—score 规范化、按小数定标规范化等。
属性构造:构造出新的属性并添加到属性集中,以帮助挖掘过程。应用实例表明,通过数据变换可用相当少的变量来捕获原始数据的最大变化。具体采用哪种变换方法应根据涉及的相关数据的属性特点而定,根据研究目的可把定性问题定量化,也可把定量问题定性化。
4、数据归约
数据归约技术可以用来得到数据集的归约表示,它接近于保持原数据的完整性,但数据量比原数据小得多。与非归约数据相比,在归约的数据上进行挖掘,所需的时间和内存资源更少,挖掘将更有效,并产生相同或几乎相同的分析结果。几种数据归约的方法:
(1)维归约:通过删除不相关的属性(或维)减少数据量。不仅压缩了数据集,还减少了出现在发现模式上的属性数目。通常采用属性子集选择方法找出最小属性集,使得数据类的概率分布尽可能地接近使用所有属性的原分布。属性子集选择的启发式方法技术有:
逐步向前选择,由空属性集开始,将原属性集中“最好的”属性逐步填加到该集合中;
逐步向后删除,由整个属性集开始,每一步删除当前属性集中的“最坏”属性;
向前选择和向后删除的结合,每一步选择“最好的”属性,删除“最坏的”属性;
判定树归纳,使用信息增益度量建立分类判定树,树中的属性形成归约后的属性子集。
(2)数据压缩:应用数据编码或变换,得到原数据的归约或压缩表示。数据压缩分为无损压缩和有损压缩。比较流行和有效的有损数据压缩方法是小波变换和主要成分分析。小波变换对于稀疏或倾斜数据以及具有有序属性的数据有很好的压缩结果。主要成分分析计算花费低,可以用于有序或无序的属性,并且可以处理稀疏或倾斜数据。
(3)数值归约:通过选择替代的、较小的数据表示形式来减少数据量。数值归约技术可以是有参的,也可以是无参的。有参方法是使用一个模型来评估数据,只需存放参数,而不需要存放实际数据。
有参的数值归约技术有以下 2 种:
① 回归:线性回归和多元回归;
② 对数线性模型:近似离散属性集中的多维概率分布。
无参的数值归约技术有 3 种:
① 直方图:采用分箱技术来近似数据分布,是一种流行的数值归约形式。其中 V-最优和 Max Diff 直方图是最精确和最实用的;
② 聚类:聚类是将数据元组视为对象,它将对象划分为群或聚类,使得在一个聚类中的对象“类似”,而与其他聚类中的对象“不类似”,在数据归约时用数据的聚类代替实际数据;
③ 选样:用数据的较小随机样本表示大的数据集,如简单选样、聚类选样和分层选样等
(4)概念分层:通过收集并用较高层的概念替换较低层的概念来定义数值属性的一个离散化。概念分层可以用来归约数据,通过这种概化尽管细节丢失了,但概化后的数据更有意义、更容易理解,并且所需的空间比原数据少。对于数值属性,由于数据的可能取值范围的多样性和数据值的更新频繁,说明概念分层是困难的。数值属性的概念分层可以根据数据的分布分析自动地构造,如用分箱、直方图分析、聚类分析、基于熵的离散化和自然划分分段等技术生成数值概念分层。分类数据本身是离散数据,一个分类属性具有有限个不同值,值之间无序。一种方法是由用户专家在模式级显示地说明属性的部分序或全序,从而获得概念的分层;另一种方法是只说明属性集,但不说明它们的偏序,由系统根据每个属性不同值的个数产生属性序,自动构造有意义的概念分层。
5、小结
在数据实际挖掘过程中,针对不同的数据源和数据挖掘目标,有选择的使用数据清理、数据集成、数据变换和数据归约等数据预处理方法和技术。它们的使用没有先后顺序的约束,某一种预处理可能需要循环多次进行,某一种预处理可能一次也不需要。尽管有多种数据预处理的方法和技术,但都不够成熟。所以,对数据挖掘中的数据预处理还需要做更进一步的深入研究。
二、数据挖掘十大经典算法
国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 2006年12月评选出了数据挖掘领域的十大经典算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART.
C4.5算法:是ID3算法的扩展,它能够产生用决策树表示的分类器,而且它还可以通过更加容易理解的规则集形式来表示分类器。
K-means算法:是一种简单的迭代算法,它能够将给定的数据集划分为用户定义的聚簇数目。
SVM支持向量机:在机器学习应用中,支持向量机被考虑为很重要的一个尝试——在所有著名的算法中,它提供了一种稳定准确的方法。它拥有强大的理论基础,只需要少数示例进行训练,并且对数据集维度数量不敏感。另外,训练SVM的有效方法已经得到快速地发展。
Apriori算法:最流行的数据挖掘方法之一就是从交易数据集中寻找频繁项集,并且产生关联规则。寻找频繁项目集是非平凡的,因为它存在组合爆炸的问题。一旦获得到频繁项目集,就可以直接根据用户定义的置信度产生关联规则。Apriori算法是一种采用候选集方法寻找频繁项目集。它是一种使用反单调性的完全层次搜索算法。如果一个项目集是非频繁的,那么它的任何超集都是非频繁的。
EM算法:有限混合分布提供一种灵活的,基于数学的建模和聚类数据集方法。常见的混合模型可以用来聚类连续数据和预测潜在的密度函数。这些混合模型可以通过最大似然的期望最大化算法来进行拟合。
PageRank算法:是一种使用互联网上的超链接的搜索排序算法。PageRank基本的方法是,越是重要的文件链接一个文件,则这个文件就越重要,但那些入站链接并不是被平等计算的。首先,如果其他高等级的文件连接到它,那么根据PageRank的规则,此文件的等级也高。
AdaBoost:集成学习是应用多个学习器来解决问题。一般来说,集成学习的能力较单个学习器的效果更优。因此,集成学习方法具有很强的吸引能力。AdaBoost方法是最重要的集成学习算法之一,它拥有牢固的理论基础,预测非常准确,并且简单和易于实现。
KNN分类算法:是通过在数据集中寻找与测试对象最近的k个对象。并且,预先定义类别标签。KNN有三个主要的核心元素:标记对象集合,对象之间的相似性度量或者距离度量,最近邻居个数K。为了区分没有标记的对象,计算对象与标记对象之间的距离。从而,识别k个最近邻居。这些最近邻居的类别标签被用来决定对象的类别标签。
朴素贝叶斯:发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。
CART:包括分类树和回归树两部分:分类树的结果变量是分类变量,回归树的结果变量是连续变量。CART是一种树型结构,由树结和连线组成,在末端的树结又称为终止结。CART可分析同质性较差的数据,采用替代变量的方法解决缺失数据问题,不要求数据的分布,可同时利用各种类型的数据。
三、阶段小结
经历了一个星期数据挖掘的学习,笔者从一名只知数据挖掘其名而不知其为何物的本科低年级学生,成为一名初识BI和数据挖掘初学者,在学习这门学科的过程中体会到了发现和探索的乐趣。
坦白地说,一开始每天将自己的学习笔记发布博客分享给大家时,我的内心十分忐忑,一来作为一名初学者,缺少整体的知识结构,难免会出现逻辑混乱,整理不完全,甚至无法甄别网络上数据的真伪的情况;二来五篇博客中的大部分内容都是摘抄与笔记,原创的东西甚少,我害怕让浏览博客的读者重复阅读,耽误大家的时间。然而,在过程中,我逐渐地发现分享学习笔记型的博客亦有其独特的长处:整理笔记发布博客的过程既让我反复核实自己的笔记中是否有差错的存在(用所学的知识就是数据预处理),又获得了一个结交志同道合伙伴的途径。当然,在五篇的学习笔记中仍然不免存在着个人能力暂时无法企及的差错,我希望自己尽力完善,同时也恳请读者们不吝指教与多多包涵。
说回到BI与数据挖掘本身,BI从被提出至今只有二十年的时间,数据挖掘的历史也并不漫长,但在大数据时代的今天,数据挖掘已经成为发展的潮流与趋势。马云曾说过,“这是一个变化的年代,当很多人还没有搞懂PC互联网的时候,移动互联网来了,当很多人还没弄懂移动互联网,大数据来了。”学习数据挖掘,无论是成为一个从业者,还是仅仅作为了解,都将让我们在如今的一个时代中不至于太过落后。在学习数据挖掘的过程中,逐渐了解了一些关于数据挖掘的历史、概念、流程、技术方法和应用实例,当然,对于数据挖掘的本质,此时尚不敢妄谈,大约是数据不再因果关系而更多地是相关关系,有待以后继续学习、验证、体悟。
学习的过程中SmartBi软件公司的软件给予了我巨大的帮助,无论是电子表格版还是Smart Mining都在学习过程中让我对数据挖掘有了更直观的体验。软件的操作只简便令我享受其中。在本文中虽然介绍了数据挖掘的十大算法,但在使用Smart Mining的过程中我未曾写过一行代码(当然这和我现在的水平较低也有一定关系),软件将操作代码的封装和拖拽图标即可实现操作使得它变得极为简洁和易上手,尤其数据可视化的操作,图表的绘制之方便无疑让我在学习的过程中体会到了巨大的乐趣,获得了学习的动力。
总结的最后感谢撰写数据挖掘相关电子版文章、博客和百科词条等的作者们,有了你们我才能如此方便的学习数据挖掘的知识整理出这些笔记,感谢SMARTBI公司的徐晶副总裁和软件开发者们,有了你们我才有这次契机去接触、学习数据挖掘,感谢阅读过文章的读者们,你们的关注与鼓励是我不断前行的动力。
前言在介绍了数据挖掘的一般流程、常用方法、应用功能和数据可视化之后,在本篇博文中,笔者想要分享一些在数据挖掘开始之前要做的一些事——数据预处理。在第二部分中,笔者整理了数据挖掘中的十大经典算法,与读者们共享。两部分分别从《数据挖掘中数据预处理的方法与技术》一文...