(1)Kmeans算法
在分布式系统中,通过聚合函数计算属于每个中心点的样本值之和并更新中心点。MLlib中的Kmeans模型中的runs参数表示可以并行设置计算的聚类中心的数量,可同时计算多组聚类中心,最后取效果最好的那一组。
在计算KMeans中样本点属于哪个聚类中心时,没有采用欧式距离,而是另一种快速查找和计算的方法。距离公式
对比欧式距离,lowerBoundOfSqDist距离值较小。如果lowerBoundOfSqDist都不小于之前得到的最小距离,就不需要比较欧氏距离了,因为欧式距离也不可能小于。如果lowerBoundOfSqDist小于之前的最小距离,调用fastSquaredDistance快速求解。如果不满足精度要求,则使用欧氏距离。
运行类 KMeans
参数 data样本数据;k聚类数量;最大迭代次数;runs 并行计算数;初始化中心,一般为random和k-means++(默认);初始化时的随机种子。k-means++的基本思想是聚类中心的距离尽可能远。
使用方法
val model = new KMeans()
.setInitializationMode(XXX)
.setK(xx)
.setMaxIterations(xxx)
.run(data)
(2)LDA
LDA 是主题模型,可以将文档集中的每一篇文档的主题以概率的形式给出。同时也是一个典型的词袋模型,每一篇文档由一组词组成。每一个文档可以有多个主题,每个词对于一个主题。
具体介绍见https://zhuanlan.zhihu.com/p/31470216
其优化方法为EM算法。
类方法 val ldaModel = new LDA()。
主题分布 val topics = ladmodel.topicmatrix
文档分布 val distLDAModel - ldaModel.asInstanceOf[DistributedKDAModel]
网友评论