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的核心公式如下:
以上是关于Spark2.0机器学习系列之8: 聚类分析(K-Means,Bisecting K-Means,LDA,高斯混合模型)的主要内容,如果未能解决你的问题,请参考以下文章
Spark2.0机器学习系列之6:GBDT(梯度提升决策树)GBDT与随机森林差异参数调试及Scikit代码分析