在PySpark中计算每个样本的轮廓系数

5
我有一个在pyspark中的Spark ML pipeline,看起来像这样:
scaler = StandardScaler(inputCol="features", outputCol="scaled_features")
pca = PCA(inputCol=scaler.getOutputCol(), outputCol="pca_output")
kmeans = clustering.KMeans(seed=2014)

pipeline = Pipeline(stages=[scaler, pca, kmeans])

训练模型后,我想像sklearn中的this函数一样,为每个样本获取轮廓系数。
我知道可以使用ClusteringEvaluator并为整个数据集生成分数。但我想为每个样本执行此操作。
在pyspark中如何高效实现?
1个回答

0

这个问题之前在Stack Overflow上已经讨论过。我想要改变答案并补充的是,你可以使用LSH作为Spark的一部分。这本质上是使用减少的维度进行盲目聚类。它减少了比较的数量,并允许您指定一个“边界”(密度限制)来确定您感兴趣的聚类密度水平。它可以用作强制执行所需密度级别的好工具。您可以先运行KMeans,然后使用质心作为近似连接的输入,或者反之亦然,帮助您选择要查看的KMeans点的数量。

我发现这个链接有助于理解LSH。

所有这些说法,您可以通过每个kmean聚类对数据进行分区,然后在分区的样本上运行轮廓(通过mapPartitions)。 然后将样本得分应用于整个组。 这里有一个很好的解释,说明如何获取样本,因此您不必从头开始。 我会假设真正密集的群集会被轮廓样本低估,因此这可能不是一种完美的方法。 但仍然会提供信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接