计算 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 后的原始训练数据,C5
是 KMeans
中的 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 数据框中的聚类成本的主要内容,如果未能解决你的问题,请参考以下文章