页面树结构

2017-07-25 Apache Spark 2.2.0 官方文档中文版发布 : http://spark.apachecn.org/docs/cn/2.2.0/


MachineLearning 优酷地址 : http://i.youku.com/apachecn

转至元数据结尾
转至元数据起始

本页介绍MLlib中的聚类算法。在基于RDD的API中聚类指南还具有关于这些算法的相关信息。

目录

k - means 

k - means 是其中一个最常用的聚类算法,点到一个集群数据 预定义的集群。 MLlib实现包括并行 变体的 k - means + + 方法 被称为 kmeans | | 

KMeans 被实现为一个估计量并生成一个 KMeansModel 基本模型。

输入列 

参数名称类型(s)默认的描述
featuresColVector"features"Feature vector

输出列 

参数名称类型(s)默认的描述
predictionColInt"prediction"Predicted cluster center

例子 (scala)

Scala
import org.apache.spark.ml.clustering.KMeans

// 加载数据
val dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt")

// 训练k-means模型
val kmeans = new KMeans().setK(2).setSeed(1L)
val model = kmeans.fit(dataset)

// 评估聚类通过计算在平方误差的总和。
val WSSSE = model.computeCost(dataset)
println(s"Within Set Sum of Squared Errors = $WSSSE")

// 显示结果
println("Cluster Centers: ")
model.clusterCenters.foreach(println)

更多的细节参考Scala API文档

Spark repo中可以找到"examples/src/main/scala/org/apache/spark/examples/ml/KMeansExample.scala"完整的例子代码。

 

Latent Dirichlet allocation (LDA)

LDA实现为一个支持EMLDAOptimizer和OnlineLDAOptimizer的估计器,并生成一个LDAModel作为基本模型。 如果需要,专家用户可以将EMLDAOptimizer生成的LDAModel转换为DistributedLDAModel。

Scala
import org.apache.spark.ml.clustering.LDA

// 加载数据
val dataset = spark.read.format("libsvm")
  .load("data/mllib/sample_lda_libsvm_data.txt")

// 训练LDA模型
val lda = new LDA().setK(10).setMaxIter(10)
val model = lda.fit(dataset)

val ll = model.logLikelihood(dataset)
val lp = model.logPerplexity(dataset)
println(s"The lower bound on the log likelihood of the entire corpus: $ll")
println(s"The upper bound bound on perplexity: $lp")

// 描述topics
val topics = model.describeTopics(3)
println("The topics described by their top-weighted terms:")
topics.show(false)

// 显示结果
val transformed = model.transform(dataset)
transformed.show(false)

有关更多详细信息,请参阅Scala API文档

在Spark repo中可以找到"examples/src/main/scala/org/apache/spark/examples/ml/LDAExample.scala"的完整代码。


角平分线k - means 

角平分线k - means是一种分层聚类使用一个 分裂的(或“自上而下”)的方法:所有观测开始在一个集群,将递归地执行 沿着层次结构。

平分k - means通常可以比常规的k - means要快得多,但是它通常会产生不同的集群。

BisectingKMeans 被实现为一个 估计量 并生成一个 BisectingKMeansModel 基本模型。

例子 

Scala
import org.apache.spark.ml.clustering.BisectingKMeans
// 加载数据
val dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt")

// 训练bisecting k-means模型
val bkm = new BisectingKMeans().setK(2).setSeed(1)
val model = bkm.fit(dataset)

// 评估聚类。
val cost = model.computeCost(dataset)
println(s"Within Set Sum of Squared Errors = $cost")

// 显示结果。
println("Cluster Centers: ")
val centers = model.clusterCenters
centers.foreach(println)

更多细节请参考Scala API 文档

可以在Spark repo中找到 "examples/src/main/scala/org/apache/spark/examples/ml/BisectingKMeansExample.scala"的完整代码。


高斯混合模型(GMM) 

高斯混合模型表示复合分布,其中点从k个高斯子分布中的一个绘出,每个具有其自身的概率。 spark.ml实现使用期望最大化算法来给出给定一组样本的最大似然模型。

GaussianMixture作为估计器实现,并生成GaussianMixtureModel 作为基本模型。

输入列 

参数名称类型(s)默认的描述
featuresColVector"features"Feature vector

输出列 

参数名称类型(s)默认的描述
predictionColInt"prediction"预测集群中心
probabilityColVector"probability"每个集群的概率

例子 

Scala
import org.apache.spark.ml.clustering.GaussianMixture

// 加载数据
val dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt")

// 训练Gaussian Mixture模型
val gmm = new GaussianMixture()
  .setK(2)
val model = gmm.fit(dataset)

// 输出混合模型参数模型
for (i <- 0 until model.getK) {
  println(s"Gaussian $i:\nweight=${model.weights(i)}\n" +
      s"mu=${model.gaussians(i).mean}\nsigma=\n${model.gaussians(i).cov}\n")
}

更多细节请参考Scala API 文档

在Spark repo中可以找到"examples/src/main/scala/org/apache/spark/examples/ml/GaussianMixtureExample.scala" 的完整代码。

 

  • 无标签