01什么是数据挖掘
数据挖掘(DataMining)应该是一门大家都听说过,但又不太容易说清楚的课程。在数据科学领域,乃至在更大的计算机科学领域,数据挖掘就好比山东蓝翔,大家不一定都知道挖掘机要怎么开,但一定都知道挖掘机技术到底哪家强。
不过,知名度高也未必全是好事,尤其是啤酒尿布的故事太经典,反而会让大家以为这活很“高端”,离自己太远,不会用也用不上。其实,很多人未必学过数据挖掘,甚至可能没有听过这四个字,但实际已经早就开始在进行数据挖掘。譬如说股民。
很多人说今年的行情很有希望,要去学炒股。学炒股就是学股市中的数据挖掘,流派很多,譬如说技术分析流,认为K线图或者其他什么图,和股市后市走势关系密切;价值投资流则认为,通过一整套考察公司的指标体系,才能更好地推测股票的未来价值;当然也有一些旁门左道,譬如说门口大妈流,就是看到门口卖菜的大妈开始谈论股票的时候,说明行情就见顶了,要赶紧抽身。不管你钟情哪种方法,所要做的事都非常类似,就是把从各种地方收集的信息,也就是“数据”,加以整理分析,挖掘出和你关心的对象的目标关系。
这样的例子还有很多,譬如数据挖掘非常非常常用的异常检测,别看这词挺学术,我举个例子大家肯定就知道了,体检。虽然这是个枸杞配啤酒的朋克养身时代,不过预防疾病还得靠体检。但是,体检的结果是一堆的指标项,是数值,但数值本身是不会告诉你身体有没啥毛病,得首先有一个标准区间,然后发现指标异常,接着还要建立指标和疾病之间的关联关系,完成了这些前期工作,最后才能通过体检告诉你身体是不是还能再战五百年。这些前期工作就是数据挖掘。说回我们的老本行计算机,异常就更多了,譬如说WEB日志,经常需要进行异常检测从而发现网络入侵。
这都是数据挖掘。不是按某本名叫《数据挖掘》的书的某某方法依样画葫芦才叫数据挖掘,正好相反,是大家在各种数据挖掘的实践中形成了一些方法和工具,大家都觉得很好用,研究人员就加以收集整理,理清条理形成体系,才最终诞生了“数据挖掘”这门课。
02数据挖掘和机器学习、模式识别
当你真的开始去学数据挖掘,遇到的第一个问题很可能是犯迷糊。数据科学领域有三朵金花,分别是数据挖掘、机器学习和模式识别,而数据挖掘的知识体系,和同样非常热门的机器学习以及模式识别有很高的重合度,那种感觉,不是在同一赛道有三名选手,而更像是在三条赛道看到了同一名选手。当然,就我的意见,这三个名词究竟存在怎样的我心中有你你心中有Ta的复杂三角关系,其实一点也不影响学习,毕竟有位红帽白须的老爷爷曾经说过,小孩子才做选择,成年人当然是全都学。三角关系越是复杂,要学的内容越是分不清你我,总的学习成本反而会更低。
但是,问题确实存在,不管看着有多像,但毕竟是有三个词,加上“到底该学哪个”这类的问题常年盘踞提问排行榜,这里我还是想尝试先回答。首先要说的是,数据挖掘、机器学习和模式识别三者并不存在什么无法逾越的鸿沟,经常出现一个算法到处客串的情况,边界越来越模糊已经是肉眼可见的大趋势。就核心内容来看,机器学习主要是工具集,数据挖掘和模式识别,则是这套工具集的两块用武之地,所以,在学习数据挖掘和模式识别的课上,你不用意外,无论选用什么教材,肯定都会看到非常多机器学习的老面孔。
再说模式识别。模式识别的重点在于两个字,识别,所以一般的应用形式都叫XX识别,譬如说现在大家都很熟的人脸识别,往大了说就是图像识别。除了图像,模式识别也研究其它各种数据形式,譬如音频类的语音识别,以及文本类的自然语言识别,当然,现在更习惯称之为自然语言理解。
最后回到我们今天的主角,数据挖掘。在写作时,我很想找到一条对数据挖掘的形式化定义,让大家能有一些具象的感觉,翻了很多资料,最后也只能宣告放弃。不过,这些资料虽然没有,我姑且取个交集,结论大概是所谓的数据挖掘,就是在各种数据之中,通过一定的方法和工具,挖掘发现感兴趣的知识。
归结来说,数据挖掘就是要解决三个问题,去哪挖、挖什么和怎么挖。下面我们就分三个部分分别介绍,数据挖掘是怎样思考这三个问题的。
03去哪挖
数据挖掘数首先要解决的问题自然就是“数据”的问题,也就是去哪挖的问题。很多人也许觉得,这算个啥问题,数据挖掘数据挖掘,当然就是去有“数据”的地方挖。我听过一些数据挖掘的课程,也参加过一些数据挖掘的比赛,给我的一个很深的感觉就是,数据是现成的,它就摆在那里,看得见摸得着,你要做的就是上家伙削它。
真的是这样吗?不对。数据在哪里是一个非常值得花时间仔细思考的问题。很多书把数据挖掘称作数据掘金,这个比喻恰如其分,挖数据也好挖金子也罢,是不是可以随便找个什么地方盘腿坐下,只要一套组合技高水平地施展完毕,金子就能“哗”地蹦出地面?肯定不是。你要挖着金子,那个地方首先得有金子。在没金子的地方挖金子,不管再怎么努力,用什么方法工具,都不可能挖到金子,因为这叫缘木求鱼。
这个问题许多书本都不太爱展开,确实,数据挖掘和哈姆雷特差不多,一千个挖掘项目有一千种挖掘需求,怎么总结也很难避免落一个挂一漏万的结果。不过,前面我们说什么是数据挖掘的时候,举了学炒股做例子,不妨多说两句,也许可以给大家带来一点思考。
我们说炒股有很多流派,有技术分析流,有价值投资流,还有门口大妈流,这些流派要解决的都是同一个问题,后市走势问题,但是,到底什么才和后市走势相关、最好是密切相关呢?不同流派有不同看法,结果就是大家所选择要去挖掘的数据并不相同,技术分析流看的是K线图,价值投资流看的是公司运营情况,门口大妈流则选择去看门口大妈。我们假设一个极端的情况,假设K线图真的是像一些人说的,准确性还不如找猴子掷飞镖来得高,也就是K线图和后市走势实际没啥关系,那水平再高的大牛花再多的时间研究,最终也不可能从K线图中找出真正有价值的信息。
去哪挖?去有金子的地方挖。
04挖什么
数据挖掘,挖的当然是数据了。不过,数据的形式有很多种。按数据类型来分,数据挖掘主要处理非依赖性数据和依赖型数据。非依赖性数据相对简单,也就是我们通常所说的“多维数据”,一条记录包括多个项目。这么说也许比较抽象,其实我们都见过,回忆一下填过的各种表格,譬如说报名表,需要填姓名、性别、年龄等等信息,这就是典型的多维数据
不过,想也知道,这些不同的项目,里面的数据格式是不尽相同的。譬如说姓名填写的是文本,性别通常是二选一,而年龄则是一个数字。在数据挖掘中,这些不同的格式也要区别对待。我看过一些数据挖掘的教材,把这些类型分得很细,充分体现了学术的严谨性。不过有些类型的名字起得太学术,还要对名字本身进行解释,这样文章篇幅就长了。这里我按经验整理,大致可以化为以下三种:
连续型数据。连续型数据首先是数值数据,而“连续”是相对于“离散”而言的,数值序列中间不会出现中断或者跳跃,譬如说年龄、气温就是此类。
离散型数据。离散型数据同样也是数值数据,简单来说就是“不连续”的数据。你可能会好奇,什么样的数据会不连续呢?很多,譬如说性别,我们用0表示女,1表示男,那性别这一栏就要么是0要么是1,中间不会有其它的值,这就是典型的离散数据。
文本型数据。前面我们一直在强调数值数据,但文本型数据在自然环境中同样非常常见,譬如说姓名,又譬如说前面提到的门口大妈流,这些都是以文本形式存储的数据。不过众所周知,文本型数据是没法直接进行计算的,一般需要通过转换成向量来进行分析。
非依赖型数据最大特点就是各个数据项彼此独立,相互之间没有依赖关系,不会“牵一发而动全身”,所以操作难度相对较低。
说完了非依赖型数据,再说说依赖型数据,所谓的“依赖”,也就是数据项之间存在某种关联变化的关系,数据挖掘将这种关系又具体分为隐式依赖关系和显示依赖关系,二者的区别在于前者的依赖比较含蓄,后者更加赤果果。但我觉得两者边界十分模糊,这里只说“依赖”究竟是怎么一回事。
数据挖掘将依赖型数据分为以下三种:
序列数据。序列数据是可以再细分的,包括连续型序列数据和离散型序列数据,但它们的特点都是明显存在着上下文依赖关系,譬如说最常见的时序数据,也就是时间序列数据。这是一种连续型的序列数据,上一个时间片和下一个时间片存在着显式或隐式的依赖关系。我们在前面已经介绍了一种序列数据,K线图。K线图是典型的时序数据,大家一般认为,行情的当前走势和未来走势是存在着某种依赖关系的,细分来说,是隐式依赖关系。空间数据。空间数据通常就是坐标数据,最容易联想到地理位置坐标,也就是经纬度,但“坐标”的应用非常广泛,譬如说宏观经济的各种指标,不同的国家通过逻辑编码,同样可以构成坐标。就我的经验,空间数据经常和时间密切关联,形成某种轨迹性质的图像,也叫时空数据,和时序数据可能会存在交集。图数据。图是计算机科学中很常用的一种数据结构,经常用来表示几个节点之间的关系,而在我们生活中也经常能看到各种“关系图”,所以,图数据自然也是一种典型的依赖型数据,而且往往是显示依赖关系。05怎么挖
怎么挖是数据挖掘的重点内容,有很多道工序,每一道工序展开又能是一整套方法体系。总的来说,数据挖掘有三大块工序,数据采集、数据预处理和数据分析。
先说这个数据采集吧,在很多人的直觉中,“数据”就是一个文件,它就岁月静好地躺在那里,你写程序去读了就好,许多数据比赛也强化了这一印象。但实际上,数据可能产生于多个不同的地方,譬如说类型完全不同的传感器,又譬如说各种不同的Web网站,火了很久还将火很久的大数据,就是从Web开始的。Web数据有最大的特点就是“大”,动不动就说我几秒产生多少个T的数据,到底有多大不要问,问就是海量。那海量数据采哪些怎么采、怎么存储、流式数据怎么分析,每一步都是一个问题,都需要你需要想各种办法。完成数据采集,将各种所需数据存入数据库,这就形成了数据仓库。这是数据挖掘的基础。
数据预处理主要是特征提取和数据清洗,包括了对原始数据进行类型转换、缺失值填补、将文本数据数据化向量化、缩放标准化等等等等。数据预处理将直接决定数据的最终质量,对挖掘结果产生十分显着的影响,有非常多的经验和技巧,完全可以再写一篇文章。
最后才是数据分析。我刚学的时候,以为“数据挖掘”就是数据分析,相信很多朋友都有过同样的误会,现在知道了,需要经历前面的千山万水才能走到这一步。但是,虽然在流程上,数据分析是最后一步,但这是最核心的一步,最终能挖到金子还是钻石,还得靠这一步。在另一方面,到了数据分析阶段,任务的背景相对就淡化了,而问题的共性明显增加,根据不同的问题积累的工具和方法,也更加容易形成“套路”。所以,数据分析自然也是数据挖掘作为一门课程的重点章节。
数据挖掘都归纳了哪些问题呢?主要包括分类问题、聚类问题、关联模式挖掘、关联模式和异常检测这四个大类,了解机器学习的朋友肯定很有亲切感,分类问题和聚类问题是机器学习最经典的两大类问题,这就是数据挖掘为什么会看到机器学习的内容。这四个问题还可以细分,譬如经典的啤酒尿布,就是关联模式问题下的频繁项挖掘问题。这些问题都有对应的算法,不同的环境下又有不同的应对方法。
这部分内容很多,是数据挖掘的重头戏,我推荐两本书,一本是韩家炜教授的《数据挖掘:概念与技术》,这是数据挖掘领域知名度最高、也是最经典的一本教材,大家肯定不陌生。另一本则是新出的《数据挖掘:原理与实践》,分为“基础篇”和“进阶篇”,篇幅上就明显增加,而且新书都有一个优点,补充了对新热点的介绍,如怎样挖掘图数据和社交网站数据,可以通过阅读本书追踪数据挖掘的最新进展。(莫凡)
本文转自: