计算 pyspark 数据框中的聚类成本

Posted

技术标签:

【中文标题】计算 pyspark 数据框中的聚类成本【英文标题】:Calculate cost of clustering in pyspark data frame 【发布时间】:2017-01-27 19:32:42 【问题描述】:

我有一个包含数百万条记录的数据框,并且我使用了 pyspark ml

KMeans to identify clusters ,现在我想找到我使用过的集群数量的内集平方和误差((WSSSE)。

我的 spark 版本是 1.6.0,computeCost 在 pyspark ml 中不可用,直到 spark 2.0.0,所以我必须自己制作。

我已经使用这种方法来查找平方误差,但它需要很长时间才能给我输出。我正在寻找一种更好的方法来查找 WSSSE。

check_error_rdd = clustered_train_df.select(col("C5"),col("prediction"))

c_center = cluster_model.stages[6].clusterCenters()
check_error_rdd = check_error_rdd.rdd
print math.sqrt(check_error_rdd.map(lambda row:(row.C5- c_center[row.prediction])**2).reduce(lambda x,y: x+y) )

clustered_train_df 是我在拟合 ML PIPELINE 后的原始训练数据,C5KMeans 中的 featuresCol

check_error_rdd 如下所示:

check_error_rdd.take(2)
Out[13]: 
[Row(C5=SparseVector(18046, 2398: 1.0, 17923: 1.0, 18041: 1.0, 18045: 0.19), prediction=0),
 Row(C5=SparseVector(18046, 1699: 1.0, 17923: 1.0, 18024: 1.0, 18045: 0.91), prediction=0)]

c_center 是集群中心的列表,其中每个中心都是长度为 18046 的列表:

print len(c_center[1]) 
18046

【问题讨论】:

在我看来,从 1.0 的许多值和稀疏向量中的大量零来看,您的数据主要是指示变量。 KMeans 算法在处理此类数据时会遇到许多问题。一种解决方法是在聚类之前使用主成分分析 (PCA) 或其他一些分解/降维技术。 【参考方案1】:

我已经计算出cost of k-means prior to version 2.0。

至于你提到的“慢”:对于 100m 点,8192 个质心,我花了 50 分钟计算成本,有 64 个执行器和 202092 个分区,每台机器有 8G 内存和 6 个内核,在客户端模式下。


引用ref:

计算成本(rdd)

返回 K-means 成本(平方和 点到最近中心的距离)对于这个模型在 给定数据。

参数:rdd - 计算成本的点的 RDD。

1.4.0 版本中的新功能。

如果您因为有 DataFrame 而无法使用它,请阅读:How to convert a DataFrame back to normal RDD in pyspark?


至于你的做法,我一眼看不出有什么不好的。

【讨论】:

我会看看这个。谢谢 编辑队列已满。超链接的参考链接是旧的。这是新的 - spark.apache.org/docs/latest/api/python/reference/api/… @TrigonaMinima 非常感谢,答案已更新!

以上是关于计算 pyspark 数据框中的聚类成本的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark:K 表示模型拟合时的聚类误差

比较具有基本事实的聚类

手动计算聚类平方和 (BCSS) 和总平方和(R 中的聚类)

高维数据的聚类小记

具有多列的聚类表

根据 Pairs 评估 Scikit-learn 中的聚类