Spark2.0机器学习系列之8: 聚类分析(K-Means,Bisecting K-Means,LDA,高斯混合模型)

Posted 千寻千梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark2.0机器学习系列之8: 聚类分析(K-Means,Bisecting K-Means,LDA,高斯混合模型)相关的知识,希望对你有一定的参考价值。

      在写这篇文章之前,先说一些题外话。
      许多机器学习算法(如后面将要提到的LDA)涉及的数学知识太多,前前后后一大堆,理解起来不是那么容易。
      面对复杂的机器学习模型,尤其是涉及大量数学知识的模型,我们往往要花费大量的时间和精力去推导数学算法(公式),如果过分沉湎于此会忽略了很多背后也许更重要的东西,正所谓只见树木,不见森林,而这是缺乏远见,是迷茫的。
      我们需要深入理解模型背后的逻辑和所蕴含的或简或繁的思想。某些思想甚至可能是很美的思想,很伟大的思想。这些理解,使得面对复杂的问题时候,面对陌生问题时,会左右我们的选择。我们会首先想起谁,谁是我们工具箱里最得心应手的工具,就像自己的孩子一样亲切。而有些方法我们注定不喜欢,也用不太懂。毕竟我们不是每个人都会去写复杂的机器学习算法code,尤其是复杂的分布式code,但也不意味着我们不需要关注模型的数学原理,因为没这些数学原理的支撑,也许你永远理解不了这个模型。但是仅仅掌握公式的推导甚至从头到尾能写出完整代码,也还是远远不够的。比如说我们都知道为了控制over-fitting,需要正则化,为什么在看似很精确的公式里面硬生生的多加入一个正则项,就能够达到控制over-fitting的目的呢?又如何判断所选择的正则化参数是合理的?不大也不小,刚好合适。公式我们都能完整的推导吧,但也许有些事我们想的还是不那么明白,用的时候自然也就会有一些疑虑。
      所以呢,要做到深入浅出真的很难,这也是我们学习ML需要努力的方向,理解这些ML模型背后的逻辑,所蕴含的美,所表达的的思想,甚至是哲理,也许能助你我成长到一个新的高度。

       好了,言归正传。在Spark2.0版本中(不是基于RDD API的MLlib),共有四种聚类方法:
     (1)K-means
     (2)Latent Dirichlet allocation (LDA)
     (3)Bisecting k-means(二分k均值算法)
     (4)Gaussian Mixture Model (GMM)。
       基于RDD API的MLLib中,共有六种聚类方法:
     (1)K-means
     (2)Gaussian mixture
     (3)Power iteration clustering (PIC)
     (4)Latent Dirichlet allocation (LDA)**
     (5)Bisecting k-means
     (6)Streaming k-means
       多了Power iteration clustering (PIC)和Streaming k-means两种。
      本文将介绍LDA主题建模,其它方法在我的整个系列中都会有介绍。

什么是LDA主题建模?

       隐含狄利克雷分配(LDA,Latent Dirichlet Allocation)是一种主题模型(Topic Model,即从所收集的文档中推测主题)。 甚至可以说LDA模型现在已经成为了主题建模中的一个标准,是实践中最成功的主题模型之一。那么何谓“主题”呢?,就是诸如一篇文章、一段话、一个句子所表达的中心思想。不过从统计模型的角度来说, 我们是用一个特定的词频分布来刻画主题的,并认为一篇文章、一段话、一个句子是从一个概率模型中生成的。也就是说 在主题模型中,主题表现为一系列相关的单词,是这些单词的条件概率。形象来说,主题就是一个桶,里面装了出现概率较高的单词(参见下面的图),这些单词与这个主题有很强的相关性。

       LDA可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。
       LDA可以被认为是如下的一个聚类过程:
       (1)各个主题(Topics)对应于各类的“质心”,每一篇文档被视为数据集中的一个样本。
       (2)主题和文档都被认为存在一个向量空间中,这个向量空间中的每个特征向量都是词频(词袋模型)
       (3)与采用传统聚类方法中采用距离公式来衡量不同的是,LDA使用一个基于统计模型的方程,而这个统计模型揭示出这些文档都是怎么产生的。

       Latent Dirichlet allocation (LDA) is a topic model which infers topics from a collection of text documents. LDA can be thought of as a clustering algorithm as follows:
       (1)Topics correspond to cluster centers, and documents correspond to examples (rows) in a dataset.
       (2)Topics and documents both exist in a feature space, where feature vectors are vectors of word counts (bag of words).
       (3)Rather than estimating a clustering using a traditional distance, LDA uses a function based on a statistical model of how text documents are generated.

       下面的几段文字来源于:http://www.tuicool.com/articles/reaIra6

       它基于一个常识性假设:文档集合中的所有文本均共享一定数量的隐含主题。基于该假设,它将整个文档集特征化为隐含主题的集合,而每篇文本被表示为这些隐含主题的特定比例的混合。

      LDA的这三位作者在原始论文中给了一个简单的例子。比如给定这几个主题:Arts、Budgets、Children、Education,在这几个主题下,可以构造生成跟主题相关的词语,如下图所示:
这里写图片描述

      然后可以根据这些词语生成如下图所示的一篇文章(其中不同颜色的词语分别对应上图中不同主题下的词)
这里写图片描述

      表面上理解LDA比较简单,无非就是:当看到一篇文章后,我们往往喜欢推测这篇文章是如何生成的,我们可能会认为某个作者先确定这篇文章的几个主题,然后围绕这几个主题遣词造句,表达成文。
      前面说了这么多,在推导模型前,总结几条核心思想:
      (1)隐含主题,形象的说就是一个桶,里面装了出现概率较高的单词,从聚类的角度来说,各个主题(Topics)对应于各类的“质心”,主题和文档都被认为存在于同一个词频向量空间中。(2)在文档集合中的所有文本均共享一定数量的隐含主题的假设下,我们将寻找一个基于统计模型的方程。
      LDA的核心公式如下: