本页介绍MLlib中的聚类算法。 在基于RDD的API中聚类的指南还具有关于这些算法的相关信息。
目录
1 k-均值 K-means
2 Dirichlet allocation (LDA)
3 平分k-均值 Bisecting k-means
4 高斯混合模型(GMM)
1 K-means
k-means是将数据点聚类到预定数量的聚类中最常用的聚类算法之一。 MLlib实现包括一个名为kmeans ||的k-means ++方法的并行化变体。
KMeans实现为一个估计器,并生成一个KMeansModel作为基本模型。
from pyspark.ml.clustering import KMeans # Loads data. dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt") # Trains a k-means model. kmeans = KMeans().setK(2).setSeed(1) model = kmeans.fit(dataset) # Evaluate clustering by computing Within Set Sum of Squared Errors. wssse = model.computeCost(dataset) print("Within Set Sum of Squared Errors = " + str(wssse)) # Shows the result. centers = model.clusterCenters() print("Cluster Centers: ") for center in centers: print(center)2 Dirichlet allocation (LDA)
LDA实现为一个支持EMLDAOptimizer和OnlineLDAOptimizer的估计器,并生成一个LDAModel作为基本模型。 如果需要,专家用户可以将EMLDAOptimizer生成的LDAModel转换为DistributedLDAModel。
from pyspark.ml.clustering import LDA # Loads data. dataset = spark.read.format("libsvm").load("data/mllib/sample_lda_libsvm_data.txt") # Trains a LDA model. lda = LDA(k=10, maxIter=10) model = lda.fit(dataset) ll = model.logLikelihood(dataset) lp = model.logPerplexity(dataset) print("The lower bound on the log likelihood of the entire corpus: " + str(ll)) print("The upper bound bound on perplexity: " + str(lp)) # Describe topics. topics = model.describeTopics(3) print("The topics described by their top-weighted terms:") topics.show(truncate=False) # Shows the result transformed = model.transform(dataset) transformed.show(truncate=False)
3 Bisecting k-means
平分k均值是使用分裂(或“自上而下”)方法的一种分层聚类:所有观察在一个簇中开始,并且分层在层级结构向下移动时递归地执行。
平分K均值通常比常规K均值快得多,但通常会产生不同的聚类。
BisectingKMeans被实现为一个估计器,并生成一个BisectingKMeansModel作为基本模型。
from pyspark.ml.clustering import BisectingKMeans # Loads data. dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt") # Trains a bisecting k-means model. bkm = BisectingKMeans().setK(2).setSeed(1) model = bkm.fit(dataset) # Evaluate clustering. cost = model.computeCost(dataset) print("Within Set Sum of Squared Errors = " + str(cost)) # Shows the result. print("Cluster Centers: ") centers = model.clusterCenters() for center in centers: print(center)4 高斯混合模型(GMM)
高斯混合模型表示复合分布,其中点从k个高斯子分布中的一个绘出,每个具有其自身的概率。 spark.ml实现使用期望最大化算法来给出给定一组样本的最大似然模型。
GaussianMixture作为估计器实现,并生成GaussianMixtureModel作为基本模。
from pyspark.ml.clustering import GaussianMixture # loads data dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt") gmm = GaussianMixture().setK(2).setSeed(538009335) model = gmm.fit(dataset) print("Gaussians shown as a DataFrame: ") model.gaussiansDF.show(truncate=False)