我们生活在信息爆炸的时代,每时每刻都在产生海量的数椐。我们在微博、微信、社交网站、门户网站、移动终端等众多的设备商产生的海量数据,面临着无法处理数据的困境。例如电商行业,每天客户的注册、建议、投诉、订单以及喜好等行为都会被记录下来,几乎每一个大公司都拥有自己庞大的客户数据信息。如何从海量的数据中提取有用的知识或者模式来改善企业的管理或提高团队运行效率,已成为如今亟待解决的问题,数据挖掘技术正是解决这一难题的有效方法。
文/黄成甲
数椐挖掘是指从原始的、未加工的海量数据中提取出有用信息。简言之,数据挖掘是有目的的收集教据,并对数据进行分析,从中找到有价值的信息或者模式。数据挖掘吸收了统计学、机器学习、模式识别、数据库和数据仓库、信息检索等技术,所以,它是一门综合学科。数据挖掘现已在商业智能(BI)、远程医疗、教育和电子商务等领域成功应用。特别的,随着互联网的发展,电子商务领域对数据挖掘的需求日益增长。
数据挖掘需要具备良好的熟学素养,统计学、概率论的知识也必不可少,同时数据挖掘还涉及到数据库、机器学习、信息检索、数据结构和基本的计算机编程能力。它还涉及一些相关领域的专业知识,可以说,数据挖掘是一门综合性比较高的学科,在不同领域应用的其体应用方法也不同。由于跨越的科目比较多,初学者往往需要其备多科目的基础知识才能学习数据挖掘。数椐挖掘主要包含数椐预处理、关联分析、分类、聚类分析、离散点检测等过程。本文主要介绍聚类分析过程。
聚类分析就是研究如何将相似的事物归为一类。聚类是把相似的对象通过静态分类的方法分成不同的类别或者更多的子集(subset),这样让在同一个子集中的所有对象都有相似的一些属性。聚类技术分为以下几类:硬划分(K-均值)、软划分(模蝴C-均值算法)、基于密度的方法(DBSCAN)。
硬划分K-均值聚类算法
K-均值是聚类分析算法中最常用、最基本的聚类算法。假设教据集D包含n个欧式空间中的对象,该算法是把n个对象(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个对象都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。该算法属于硬划分,需要人为指定划分的类数(即k)。通常,我们将误差的平方和作为全局的目标函数。此时,簇的中心就是该簇内所有数据点的乎均值。
K-均值算法的优点是简单快速、易于理解、时间复杂度低。但K-均值对高维度数据处理效果差,并且不能识别非球形的簇。
软划分的模糊C-均值算法
该算法来源于扎德的模糊集理论。模糊C-均值算法,是指该算法的聚类(簇)的界限是模糊的,不同于K-均值中的簇是确定的,以质心为中心,确定的簇。也就是说:模糊C-均值中,每个数据对象到每个簇都存在一个隶属度,但是每个数据对象到所有簇的隶属度之和为1。其中,隶属度又叫做隶属权值(用W表示)。
它的思想是:先人工随机指定每个数据到各个簇的隶属度,然后根据隶属度计算每一个簇的质心,接着更新隶属度矩阵,直到质心不变化(变化的绝对值都低于阈值h),其缺点是不能确保模糊C-均值算法收敛于一个最优解,算法的性能依赖于初始聚类质心。因此,我们可以用另外的快速算法确定初始聚类中心,然后再运行模糊C-均值算法;或者每次用不同的初始聚类中心,通过多次启动模糊C-均值算法来获得结果。
基于密度的DBSCAN算法
DBSCAN是一种基于密度的聚类算法,主要用于处理噪声。对象O的密度可以用靠近O的对象数来度量,算法的核心思想是找出所有核心点、边界点、噪声点。去除噪声点,连接核心对象和它的邻域,进而形成稠密区域作为簇,该算法的好处在于可以有效处理数据集中的噪声点。与K-均值比较起来,DBSCAN不需要输入要划分的聚类个数,并且可以处理各种形状的簇。
其缺点是算法的时间复杂度较高,因此不能处理高维度数据。
分析互联网上大众情绪
数据挖掘算法可以对互联网上的数据进行分析,例如分析社交网络上大众的情绪。简单地讲,数据挖掘上是一个自动分类的问题,即把人的情绪分为若干类,然后把网络数据根据内容确定为其中的一类{或者几类)。具体实现的方法大致有两种,第一种是有监督的机器学习,大致步骤如下:首先,从网络数据中选取一些样本(比如帖子,也称为训练样本),手工地对每个帖子打上一个情绪的标签(高兴、愤怒、焦虑等等),这就将它们各自分到所属的类别。
其次,根据每一类情绪对应的帖子,找到相应的特征,这些特征可以是简单的关键词、关键词的组合、表情符号。甚至是一些标点符号(比如问号和感叹号),也可以是表述时用的句式、语法结构等等,每一种情绪对应的特征是不同的。最后,把大体收集来的网络数据拿来,从中抽取特征,和每一类情绪的特征做比对,就能大致确定大众在网络数据中所反映的情绪。
这种方法主要的缺点是手工标注出每一个样本所对应的情绪,工作量很大,为了克服这个问题,可以采用一种无监督的机器学习方法,也就是说,一开始随机地给样本设定一种情绪,当然这种情绪的初始设定大部分是不正确的,不过没有关系。接下来可以采用一种自适应的机器学习方法,通过多次迭代来修改最初的错误,一般来讲,每迭代一次,就能修正一部分错误,直到计算机找不到更多的错误为止。这样,前面那种算法的第一步就自动完成了,以后的步骤则相同。这种方法的好处是减少人工,缺点是计算量非常大,而且有时机器学习的算法找不出错误,不等于错误不存在。因此,可以讲两种方法各有千秋。
至于机器学习的算法,目前很热门的人工神经网络方法就非常适用,此外,很多其它机器学习的方法(比如贝叶斯网络或者最大熵模型)也都可以解决这个问题。它们的效果可能略有差别,但是总体来讲差别不大,甚至可以被认为是等价的,采用哪一种都可以。