Sre*_* TP 5 python pyspark apache-spark-mllib
我在 pyspark 中有一个 Spark ML 管道,如下所示,
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])
Run Code Online (Sandbox Code Playgroud)
训练模型后,我想获得每个样本的轮廓系数,就像sklearn中的这个函数一样
我知道我可以使用 ClusteringEvaluator 并为整个数据集生成分数。但我想对每个样本都这样做。
如何在 pyspark 中有效地实现这一目标?
之前在 Stack Overflow 上对此进行过探讨。我要改变答案并补充的是你可以使用LSH作为Spark 的一部分。这本质上是用一组减少的维度进行盲聚类。它减少了比较次数,并允许您为集群指定“边界”(密度限制)。它可以作为一个很好的工具来强制执行您感兴趣的密度级别。您可以首先运行 KMeans 并使用质心作为近似连接的输入,反之亦然,帮助您选择要查看的 kmeans 点的数量。
我发现此链接有助于理解 LSH。
话虽如此,您可以按每个 kmean 集群对数据进行分区,然后对分区样本运行 Silhouette(通过mapPartitions)。然后将样本分数应用于整个组。这里很好地解释了如何采集样本,因此您不必从头开始。我认为轮廓样本会强调真正密集的簇,因此这可能不是解决问题的完美方法。但仍然会提供信息。