【问题标题】:Calculate cost of clustering in pyspark data frame计算 pyspark 数据框中的聚类成本
【发布时间】: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) 或其他一些分解/降维技术。

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


【解决方案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?


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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-03-24
  • 2015-06-29
  • 1970-01-01
  • 2017-10-13
  • 2022-01-15
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
相关资源
最近更新 更多