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

时间:2016-09-20 01:50:38

标签: apache-spark dataframe pyspark distributed-computing k-means

我有一百万条记录的数据框,我使用了pyspark ml

KMeans识别集群,现在我想找到我所使用的集群数量的内集平方和误差((WSSSE)。

我的火花版本是1.6.0,而computeCost在pyspark ml中不可用,直到火花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后的原始训练数据,C5featuresCol中的KMeans

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 :(得分:1)

我计算了cost of k-means prior to version 2.0

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

引用ref

  

computeCost(RDD)

     

返回K均值成本(平方和   这个模型的点距离到最近的中心   给定数据。

     

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

     

新版 1.4.0

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

至于你的方法,我一眼就看不到任何坏事。