Spark KMeans 聚类:获取分配给一个聚类的样本数
Spark KMeans clustering: get the number of sample assigned to a cluster
我正在使用 Spark Mlib 进行 kmeans 聚类。我有一组向量,我想从中确定最有可能的聚类中心。因此,我将 运行 kmeans 聚类训练在这个集合上,select 分配给它的向量数量最多的集群。
因此我需要知道训练后分配给每个集群的向量数量(即 KMeans.run(...))。但是我找不到从 KMeanModel 结果中检索此信息的方法。我可能需要对所有训练向量进行 运行 predict
计算出现次数最多的标签。
还有其他方法吗?
谢谢
你是对的,这个信息不是由模型提供的,你必须运行 predict
。下面是一个以并行方式执行此操作的示例(Spark v. 1.5.1):
from pyspark.mllib.clustering import KMeans
from numpy import array
data = array([0.0,0.0, 1.0,1.0, 9.0,8.0, 8.0,9.0, 10.0, 9.0]).reshape(5, 2)
data
# array([[ 0., 0.],
# [ 1., 1.],
# [ 9., 8.],
# [ 8., 9.],
# [ 10., 9.]])
k = 2 # no. of clusters
model = KMeans.train(
sc.parallelize(data), k, maxIterations=10, runs=30, initializationMode="random",
seed=50, initializationSteps=5, epsilon=1e-4)
cluster_ind = model.predict(sc.parallelize(data))
cluster_ind.collect()
# [1, 1, 0, 0, 0]
cluster_ind
是一个与我们初始数据基数相同的RDD,它显示了每个数据点属于哪个集群。因此,这里我们有两个集群,一个有 3 个数据点(集群 0),一个有 2 个数据点(集群 1)。请注意,我们有 运行 并行方式(即在 RDD 上)的预测方法 - collect()
仅用于我们的演示目的,在 'real' 情况下不需要.
现在,我们可以通过
获得簇大小
cluster_sizes = cluster_ind.countByValue().items()
cluster_sizes
# [(0, 3), (1, 2)]
据此,我们可以得到最大簇索引和大小为
from operator import itemgetter
max(cluster_sizes, key=itemgetter(1))
# (0, 3)
即我们最大的集群是集群 0,大小为 3 个数据点,可以通过检查上面的 cluster_ind.collect()
轻松验证。
我正在使用 Spark Mlib 进行 kmeans 聚类。我有一组向量,我想从中确定最有可能的聚类中心。因此,我将 运行 kmeans 聚类训练在这个集合上,select 分配给它的向量数量最多的集群。
因此我需要知道训练后分配给每个集群的向量数量(即 KMeans.run(...))。但是我找不到从 KMeanModel 结果中检索此信息的方法。我可能需要对所有训练向量进行 运行 predict
计算出现次数最多的标签。
还有其他方法吗?
谢谢
你是对的,这个信息不是由模型提供的,你必须运行 predict
。下面是一个以并行方式执行此操作的示例(Spark v. 1.5.1):
from pyspark.mllib.clustering import KMeans
from numpy import array
data = array([0.0,0.0, 1.0,1.0, 9.0,8.0, 8.0,9.0, 10.0, 9.0]).reshape(5, 2)
data
# array([[ 0., 0.],
# [ 1., 1.],
# [ 9., 8.],
# [ 8., 9.],
# [ 10., 9.]])
k = 2 # no. of clusters
model = KMeans.train(
sc.parallelize(data), k, maxIterations=10, runs=30, initializationMode="random",
seed=50, initializationSteps=5, epsilon=1e-4)
cluster_ind = model.predict(sc.parallelize(data))
cluster_ind.collect()
# [1, 1, 0, 0, 0]
cluster_ind
是一个与我们初始数据基数相同的RDD,它显示了每个数据点属于哪个集群。因此,这里我们有两个集群,一个有 3 个数据点(集群 0),一个有 2 个数据点(集群 1)。请注意,我们有 运行 并行方式(即在 RDD 上)的预测方法 - collect()
仅用于我们的演示目的,在 'real' 情况下不需要.
现在,我们可以通过
获得簇大小 cluster_sizes = cluster_ind.countByValue().items()
cluster_sizes
# [(0, 3), (1, 2)]
据此,我们可以得到最大簇索引和大小为
from operator import itemgetter
max(cluster_sizes, key=itemgetter(1))
# (0, 3)
即我们最大的集群是集群 0,大小为 3 个数据点,可以通过检查上面的 cluster_ind.collect()
轻松验证。