学习笔记(1)-数据挖掘及其应用浅谈

刚刚结束数据挖掘的课程,对数据挖掘的理论与算法有了一定的了解,借此报告的机会对数据挖掘知识进行一些梳理,并对现有工作中数据挖掘的应用和存在的问题进行讨论。
一、数据挖掘知识汇总(简介):
数据挖掘是数据库知识发现(英语:Knowledge-Discovery in Databases,简称:KDD)中的一个步骤,其本质是在大型的存储数据中自动的发现有用信息的过程。任务包括预测建模(分类及回归拟合)、聚类分析、关联分析、异常检测等部分。在计算机各领域中均有重要的作用。目前的研究目标是基于事实的建模和分析,在医疗、金融、安全和其它领域已有领先的应用。
1、数据预处理
为了解决数据集可能存在的不完整、含有噪声、数据不一致等问题,需要对数据进行预处理。主要包括:数据清理(处理空数据、冗余数据、离群点等)、数据集成、数据变换(规范化)、数据规约(数据压缩)以及数据的离散化。
2、关联规则及其挖掘技术
关联规则挖掘则是从事务集合中挖掘出满足支持度和置信度最低阈值要求的所有关联规则。通常的方法是寻找频繁项集进而得到频繁的规则。最经典的关联规则挖掘算法是Apriori算法,主要利用先验原理:如果一个项集是频繁项目集,那么它的非空子集必定是频繁项目集。针对Apriori算法的扫描次数多、中间项多等固有缺陷,J. Han等提出了不产生候选挖掘频繁项集的方法:FP-树算法。采用分治策略把数据库中的频集压缩进一棵频繁模式树(FP-tree)进行挖掘。
3、分类技术
分类的目的是构造一个分类函数或分类模型(分类器),该模型能把数据集中的数据项映射到某一个给定类别。因此有人将分类问题等价于监督学习。提到监督学习需要介绍一下统计学习。统计学习三要素:模型、策略与方法,其中模型的训练即为分类器的训练过程,模型的选择预评估即是分类器的选择评估。常用的分类算法有:K-近邻法、贝叶斯算法、决策树算法、LR模型、支持向量机(SVM)、人工神经网络(ANN)以及随机森林、条件随机场等。
4、聚类技术
聚类,又称为聚簇,是把一组数据实例分到子集中,其中相似的实例被分到一组,而不同的实例被分到不同的组中,与分类不同,每个对象的类别属性都是事先未知的,属于无监督学习。簇是数据对象的集合,同一簇中的对象彼此相似,而与其他簇中的对象相异。依据不同的原理对聚类算法进行分类,主要包括基于层次的方法、基于划分的方法、基于密度的方法、基于模型的方法、基于网格的方法等。
5、几个问题:
1)数据挖掘与机器学习:
“机器学习”是人工智能的核心研究领域之一, 其最初的研究动机是为了让计算机系统具有人的学习能力以便实现人工智能。广泛采用的机器学习的定义是“利用经验来改善计算机系统自身的性能”[1],由于“经验”在计算机系统中主要是以数据的形式存在的,因此机器学习需要设法对数据进行分析。
“数据挖掘”和“知识发现”通常被相提并论,粗略地讲,数据挖掘可以视为机器学习和数据库的交叉,它主要利用机器学习方法来分析海量数据,利用数据库技术来管理海量数据。[2]当然,数据挖掘还包括特有的关联分析内容。顺便注意一下数据挖掘和模式识别的区别:数据挖掘重在发现知识,模式识别重在认识事物。
2)数据挖掘在NLP中的应用:
数据挖掘在自然语言处理中的主要应用就是文本分类:将一篇文档归入预先定义的几个类别中的一个或几个。文本分类问题与其它分类问题没有本质上的区别,其方法可以归结为根据待分类数据的某些特征来进行类匹配。因此核心的问题便转化为用哪些特征表示一个文本才能保证有效和快速的分类。
文本分类的研究可以追溯到上世纪六十年代,早期的文本分类主要是基于知识工程(Knowledge Engineering),通过语言学专家的建议手工定义一些规则来对文本进行分类,这种方法费时费力,且必须对某一领域有足够的了解,才能写出合适的规则。到上世纪九十年代,随着网上在线文本的大量涌现和机器学习的兴起,大规模的文本(包括网页)分类和检索重新引起研究者的兴趣。文本分类系统首先通过在预先分类好的文本集上训练,建立一个判别规则或分类器,从而对未知类别的新样本进行自动归类。[3]
二、分类算法在文本分类中的应用
一个文本分类问题就是将一篇文档归入预先定义的几个类别中的一个或几个,而文本的自动分类则是使用计算机程序来实现这样的分类。[1]中给出了多种文本分类的概念,参考其他资料发现主要有几点需要注意:第一,分类所需要的类别体系即类别及其标号是预先确定的;第二,一篇文档并没有严格规定只能被分配给一个类别,而是与分类这个问题的主观性有关,可以采用置信度来评估;第三,文本分类不等价与“判断一篇文章说的是什么”(依据主题的分类),还可以判断作者的写作风格,主观情绪乃至辨别真伪。文本分类也不是“网页分类”,网页中包含的信息更多也更复杂。。
文本分类的研究可以追溯到上世纪六十年代,早期的文本分类主要是基于知识工程(Knowledge Engineering),通过手工定义一些规则来对文本进行分类,这种方法费时费力,且必须对某一领域有足够的了解,才能写出合适的规则。到上世纪九十年代,随着网上在线文本的大量涌现和机器学习的兴起,大规模的文本(包括网页)分类和检索重新引起研究者的兴趣。
文本分类作为一个分类问题构造一个分类函数或分类模型(分类器),根据待分类数据的某些特征来进行匹配。主要问题是文本表示、特征的选择与分类器的构建。目前文本表示模型主要是Gerard Salton和McGill于1969年提出的向量空间模型(VSM)。向量空间模型的基本思想是把文档简化为特征项的权重为分量的向量表示:D(w1,w2,…,wn),其中wi为第i个特征项的权重,一般选取词作为特征项,权重用词频表示。词频分为绝对词频和相对词频.绝对词频,即用词在文本中出现的频率表示文本;相对词频,即为归一化的词频,其计算方法主要运用TF-IDF公式,通常使用的是后者。以词汇为研究对象的特征向量带来了所谓的“维度灾难”问题,在降低特征空间的维数同时要保证或提高分类的效率和精度,也就是特征选择和特征抽取。Rocchio算法(基本的思路是把一个类别里的样本文档各项取个平均值称为“质心”,以质心的相似性代替文档相似性)、朴素贝叶斯分类算法、K-近邻算法、决策树算法、神经网络算法和支持向量机算法等均可以作为分类器的实现方法。
K-Means算法是一种基于划分方法的经典聚类算法,是十大经典数据挖掘算法之一[4]。该算法随机选择或根据一些启发式方法选择一个厨师点集合。在每次的迭代过程中,每个样本点根据计算相似度被分配到最近的簇中,然后重新计算簇的中心。
SVM 分类器的文本分类效果很好,是最好的分类器之一。优点在于通用性较好,且分类精度高、分类速度快、分类速度与训练样本个数无关。SVM 训练的本质是解决一个二次规划问题,得到的是全局最优解,因此具有其他方法无法比拟的优势。
三、标签传播算法在社区发现中的应用
机缘巧合下和一位师兄共同研究了一些关于社区发现的问题,其问题的本质应当属于一种聚类算法,现将相关知识以及工作总结如下:
1、社区及社区发现:
网络图内部连接比较紧密的节点子集合对应的子图叫做社区(community),各社区节点集合彼此没有交集的称为非重叠型(disjoint)社区,有交集的称为重叠型(overlapping)社区。对给定的网络图寻找其社区结构的过程称为“社区发现”[5]。大体上看,社区发现的过程就是一种聚类的过程。
2、标签传播算法:
标签传播算法是不重叠社区发现的经典算法,其基本思想是:将一个节点的邻居节点的标签中数量最多的标签作为该节点自身的标签。给每个节点添加标签(label)以代表它所属的社区,并通过标签的“传播”形成同一标签的“社区”结构。
一个节点的标签取决于它邻居节点的标签:假设节点z的邻居节点有z1至zk,那么哪个社区包含z的邻居节点最多Z就属于那个社区(或者说z的邻居中包含哪个社区的标签最多,z就属于哪个社区)。优点是收敛周期短,无需任何先验参数(不需事先指定社区个数和大小),算法执行过程中不需要计算任何社区指标。

输入:无向图邻接矩阵AdjacentMatrix,节点个数VerticeNum 
输出:存储节点标签的分类数组Community
//初始化每个节点的标签
For i <- 0 to VerticeNum Do
    Community[i] <- i
    //寻找i节点的所有邻居存入Neighbor[i]
    FindMaetexNonZero(i,AdjacentMatrix,NeighBor[i])
while 未达到分类标准 or 未超出迭代阈值 then
    RandomSort(SS)//生成随机序数队列SS
    For i <- 0 to VerticeNum Do
        //统计节点i邻居中数量最多的标签
        VectorFrequency(Neighbor[i], lable)
        //若只有一个数量最多则直接赋值
        if lable.size() = 1 then
            Community[i] <- lable[0]
        //若有多个相同数量的标签则随机选择一个
        else then
            Community[i] <- lable[random]
return Community

一次迭代过程中一个节点标签的更新可以分为同步和异步两种。所谓同步更新,即节点z在第t次迭代的label依据于它的邻居节点在第t-1次迭代时所得的label;异步更新,即节点z在第t次迭代的label依据于第t次迭代已经更新过label的节点和第t次迭代未更新过label的节点在第t-1次迭代时的label。

图1 karate club示例
该算法的时间复杂度接近线性:对顶点分配标签的复杂度为O(n),每次迭代时间为O( m),找出所有社区的复杂度为O (n +m),但迭代次数难以估计。
3、评测与改进
社区发现的主要评价指标有Jaccard指数,fsame指数、NMI(规范化交互信息)以及Modularity(模块度)等。常用的训练集是一些真实基准网络,如:karate(空手道俱乐部,34个节点,78条边的无向图)、Football(美国大学橄榄球联盟、115个节点无向图)等[6]。

图2 karate club的Jaccard与Fsame矩阵
在算法的实现与评测过程中发现:每个顶点在初始的时候赋予唯一的标签,即“重要性”相同,而迭代过程又采用随机序列,会导致同一初始状态不同结果甚至巨型社区的出现;如果能预测“社区中心”点,能有效提高社区发现的准确度,大幅提高效率;对于同一节点的邻居节点的标签可能存在多种社区最大数目相同的情况,取“随机”一个作为其标签,进一步提高了不稳定性。
为了解决上述问题,我们提出了几种改进方案:
1)在社区中寻找不重叠三角形作为起始簇的雏形,以提高算法结果的稳定性和运行效率;
2)添加标签熵属性,在迭代过程中不采用随机序列,而是根据每个节点的标签熵来排序序列;
3)在2)的基础上,为了不完全消除标签传播算法的随机性,将排序好的队列平均分成三个部分,在每个部分内,节点进行随机排列。
4)对于同一节点的邻居节点的标签可能存在多种社区最大数目相同的情况,不使用随机方法,而是分析该节点的邻节点的邻节点集标签分布情况来决定该节点的标签
5)在社区中寻找以度最大的若干节点为中心的“雪花型”结构作为起始簇的雏形
在实现的过程中,将上述方案进行组合衍生出更多的可行方案,初步试验结果表明算法的随机性与稳定性很难同时保证,设定起始簇的结构收敛速度快但有可能生成巨型社区;在节点较少的情况下,标签熵的方法准确率和稳定性最好;至于组合方案人需要进一步试验验证。
四、小结
近年来,数据挖掘引起了信息、产业界的极大关注,其主要原因是信息时代产生的海量数据及机器学习方法的广泛使用。人们迫切的需要将这些数据转换成有用的信息和知识。
数据挖掘在计算机方向的各个领域中均有重要作用,具体到我的研究方向,其分类算法广泛应用于统计学习进而构建语言模型,聚类算法常用于文本分类进而实现文本分析。随着机器学习技术的进一步成熟,数据挖掘将会在各个方面扮演更加重要的角色。

五、参考文献:
[1] T. M. Mitchell. Machine Learning, New York: McGraw-Hill, 1997.
[2]周志华:数据挖掘与机器学习
[3]文本分类概述 http://blog.csdn.net/chl033/article/details/4733647
[4]Xindong Wu,Vipin Kumar.etc Top 10 algorithms in data mining[J].Knowl Info Syst.2008,14:1-37
[5]什么是社区发现 http://blog.csdn.net/itplus/article/details/41348651
[6]Near linear time algorithm to detect community structures in large-scale networks
[7]基于优化标签传播算法的社区发现方法研究
[8]《数学之美》-吴军 第十一章
[9]《统计学习方法》-李航

你可能感兴趣的:(数据挖掘,NLP)