0.一些废话
本系列博客是对半年来数据挖掘课程上所学到的东西的一个简要整理,包含理论知识以及部分的代码实现(以课堂作业为主),所有博文主要以笔记的形式呈现,也会整合一些之前看到的一些资料和个人的一些见解,权作为一个记录,因此可能会有错误或者一些遗漏,为此在每篇博客最后,会附上相关的资料链接,如果不明白的地方可以进一步查阅,以备咨询。
1.数据挖掘概述
任何课程的开始都是从概述而起,我个人认为,有时候第一堂的概述也许比后面的任何学到的技术层面的东西更为重要。后续的知识不会可以再补,但是如果一开始就没有搞清楚要学习的这门课所要研究的问题,所涉及的领域,对后面的影响无疑是巨大的。在最开始形成一个清晰而又明确的认识,是万里长征的第一步。
定义
定义:数据挖掘是研究数据的收集、清理、处理、分析,并从数据中获取有用的信息。
请注意定义中的所有加粗内容,这里蕴含着数据挖掘的一个基本流程,也是后续学习到的数据挖掘的相关技术的一个线索。
数据挖掘有许多学科相关,下图是一个示意:
数据挖掘基本流程
下图是数据挖掘的基本流程示意图
数据收集
数据收集这部分目前不是笔者研究的重点,数据可以来自于互联网,也可以来自于硬件传感器等等,总之,数据的来源我们并不是很关心,当然,与数据来源有关的一些数据属性是我们需要关注的。但是事实是,在生产环境中,大公司与小公司的区别往往不是在算法层面,而是在数据规模上,大公司往往能获得更大的数据,因此可作出更好的应用。
数据预处理(特征抽取、数据清理与整合)
数据预处理过程是比较重要的一个环节,会影响到后续过程的好坏,坊间传言,特征选取的好坏决定了最后的结果的上限,而使用的机器学习等算法只是逼近这个上限。在一些数据比赛和一些常规的数据挖掘任务中,其实绝大部分的工作都集中在预处理阶段,算法只要运用sklearn或者xgboost等成熟的第三方库即可。
特征抽取主要是为了后续算法的输入,而数据清理主要是处理空值、明显的错误数据、数据归一化等。数据整合是要把一些异构的数据整合在一起可以同时输入进模型中参与运算。分析处理
运用各种机器学习统计学习等算法对数据进行建模分析。这一部分主要涉及相关算法的内容,也是学术界研究的重点。
输出结果
最后获得新数据的预测结果,或者是对前面的模型进行验证工作。在机器学习领域,模型的泛化能力是一个很重要的考察方向。
基本概念
有一些基本的概念需要在最前面进行说明,这里以数据库的相关概念作为对比。
- 数据点(data point):也成为样本点,是用来建模的原材料,一个具有n个数据点的集合用x1,x2....xn表示,每个数据点对应于数据库中的记录。
- 属性(attribute):也称为特征(feature),每一个数据点具有固定的特征维度,比如一个数据点xi具有d个特征维度,于是xi可以表示为[x1i,x2i,...xdi]的一个向量,其中每个属性对应于数据库中的字段。
- 数据集:一般情况下,数据可以表示为一个大的矩阵,约定俗成下,每一行代表一个数据点,每一列代表一个属性,这个矩阵对应于数据库中的数据表。
- 标签(label):有时候需要有一列特殊的属性,称之为标签,用来专门表示该数据点的归属。比如分类问题中,标签就代表了每个数据点的归属类别,相当于分类的答案。标签主要有监督学习中使用,这一点具体之后会有介绍。
举例:假设有关于交易记录的一组数据,每位顾客一次购买的所有物品的集合就是一个数据点,而每件物品就是一个属性,两者会组成一张表格,就是数据集,如果要做分类,比如要从顾客的购买行为中分析出年龄段,那么标签就是每位顾客所属的年龄段。
下图给出了常见的数据组织形式
数据类型
对数据进行处理分析,第一步是要认识数据,其中最基本的问题就是数据是什么类型的,这一点十分重要,对后续的预处理过程以及建模算法的选择有很大影响(后面会介绍一下有什么不同)。现总结几种常见的数据类型分类方法。
无依赖数据
数据项之间和属性之间是没有依赖关系的,是独立同分布的,也就是说某个数据点在某个属性上取什么值和其它数据点以及其它属性都是没有关系的。大部分的静态的数据基本都近似满足这个性质。有时候也称之为transaction。- 数值型:数据的取值是连续型变量或者是可以计算的离散型变量
- 类别型:数据的取值是无序的离散型变量
- 混合型:以上两种均有,最为常见
数值型数据意味着可以进行正常的算术运算,例如可以计算均值方差等,而类别型不能直接计算算术运算,原因一是类别型数据一般不是数值化的,比如性别就是男或者女,一般都是用字符给出的,不是数字。原因二是,即使经过了数值编码,其算术运算也没有意义,比如规定男用1表示,女用0表示,对这些数据进行加减乘除是没有意义的。
- 二值型数据:这种数据每个特征维度上都只有两种取值可能,代表该数据点有或没有这个特征,在NLP中应用很多(以后会有举例说明)。
- 文本数据:偏向于NLP,文本数据是一组字符串集合,不能直接分析,因此需要进行一定的转化。基本方法有二值化表示、词频表示,还有最近比较火的word2vector词向量表示。
自然语言处理其中最困难的一个环节就是语言的表示问题,这个问题相当于数据挖掘中的特征提取。语言表示的好坏直接决定了最后的效果。
有依赖数据
数据项之间或者属性之间不是独立同分布的,举例来说,一个数据点的产生与它前面的数据点有一定关联,或者与其余属性有关联,就是有依赖关系了。典型的有依赖数据包括社交网络数据和时间序列数据,分别代表了空间依赖性和时间依赖性。
- 序列数据:时间序列的推广版,数据点之间前后有一定的依赖关系,并不是独立同分布的,这个依赖关系可以是因为时间产生的,比如时间序列,也可以是空间产生的,比如蛋白质位点。序列数据取值可以使连续性变量也可以是离散型变量。
- 图数据:典型的就是社交网络数据和化学分子构型数据,这一块儿接触的较少,不做赘述,不过组会听报告的时候有一位师兄做的就是频繁子图挖掘,就是寻找频繁出现的拓扑结构,应该属于此类。
大数据与流数据
目前数据挖掘遇到了一些新问题,典型的两个问题如下:
- 数据规模变大,单台机器处理困难,效率低:分布式机器学习
- 不断产生大量数据,完全储存已不可能:在线学习、概念漂移
这些都是数据挖掘随着处理数据的规模扩大和数据特性变化而面临的新挑战。
数学基础
导论基本到这里就结束了,在课程开始之前,老师建议我们要先复习(预习)一下数学基础,主要涉及:
- 线性代数
- 数学分析
- 概率论与数理统计
- 优化理论
这几门课笔者也在重新捡起的过程中,有机会也做一些总结,先立下个flag。在此笔者列出准备要捡起来的基本数学基础的书,比较适合我这样的小白,大神自动忽略。
陈希孺. 概率论与数理统计[M]. 科学出版社 中国科学技术大学出版社, 2009.
TomM.Apostol. 线性代数及其应用导论[M]. 人民邮电出版社, 2010.
高等数学 同济大学数学教研组
最后说明,本系列博客笔记主要引用的是课程上的PPT和所有的教材,特此说明出处。
Charu C. Aggarwal. Data Mining: TheTextbook. Springer, May 2015
南京大学 数据挖掘课程PPT 张利军老师
PS:MarkDown编辑器还挺好用的哈!