k - means 是其中一个最常用的聚类算法,点到一个集群数据 预定义的集群。 MLlib实现包括并行 变体的 k - means + + 方法 被称为 kmeans | | 。
KMeans
被实现为一个估计量
并生成一个 KMeansModel
基本模型。
参数名称 | 类型(s) | 默认的 | 描述 |
---|---|---|---|
featuresCol | Vector | "features" | Feature vector |
参数名称 | 类型(s) | 默认的 | 描述 |
---|---|---|---|
predictionCol | Int | "prediction" | Predicted cluster center |
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"完整的例子代码。
LDA实现为一个支持EMLDAOptimizer和OnlineLDAOptimizer的估计器,并生成一个LDAModel作为基本模型。 如果需要,专家用户可以将EMLDAOptimizer生成的LDAModel转换为DistributedLDAModel。
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)
在Spark repo中可以找到"examples/src/main/scala/org/apache/spark/examples/ml/LDAExample.scala"的完整代码。
角平分线k - means是一种分层聚类使用一个 分裂的(或“自上而下”)的方法:所有观测开始在一个集群,将递归地执行 沿着层次结构。
平分k - means通常可以比常规的k - means要快得多,但是它通常会产生不同的集群。
BisectingKMeans
被实现为一个 估计量
并生成一个 BisectingKMeansModel
基本模型。
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"的完整代码。
高斯混合模型表示复合分布,其中点从k个高斯子分布中的一个绘出,每个具有其自身的概率。 spark.ml实现使用期望最大化算法来给出给定一组样本的最大似然模型。
GaussianMixture作为估计器实现,并生成GaussianMixtureModel 作为基本模型。
参数名称 | 类型(s) | 默认的 | 描述 |
---|---|---|---|
featuresCol | Vector | "features" | Feature vector |
参数名称 | 类型(s) | 默认的 | 描述 |
---|---|---|---|
predictionCol | Int | "prediction" | 预测集群中心 |
probabilityCol | Vector | "probability" | 每个集群的概率 |
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") }
在Spark repo中可以找到"examples/src/main/scala/org/apache/spark/examples/ml/GaussianMixtureExample.scala" 的完整代码。