首页 > 解决方案 > PySpark如何找到适当数量的集群

问题描述

当我使用 Python 和 sklearn 时,我绘制了肘法以找到适当数量的 KMean 集群。当我在 PySpark 中工作时,我也想做同样的事情。我知道由于 Spark 的分布式特性,PySpark 的功能有限,但是,有没有办法获得这个数字?

我正在使用以下代码绘制肘部 使用 Elbow 方法从 sklearn.cluster import KMeans 中找到最佳集群数

wcss = []
for i in range(1, 11):
    kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=0)
    kmeans.fit(X)
    wcss.append(kmeans.inertia_)

plt.plot(range(1, 11), wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()

在此处输入图像描述

标签: pythonapache-sparkmachine-learningpysparkk-means

解决方案


我用另一种方式做到了。使用 Spark ML 计算特征的成本并将结果存储在 Python 列表中,然后绘制它。

# Calculate cost and plot
cost = np.zeros(10)

for k in range(2,10):
    kmeans = KMeans().setK(k).setSeed(1).setFeaturesCol('features')
    model = kmeans.fit(df)
    cost[k] = model.summary.trainingCost

# Plot the cost
df_cost = pd.DataFrame(cost[2:])
df_cost.columns = ["cost"]
new_col = [2,3,4,5,6,7,8, 9]
df_cost.insert(0, 'cluster', new_col)

import pylab as pl
pl.plot(df_cost.cluster, df_cost.cost)
pl.xlabel('Number of Clusters')
pl.ylabel('Score')
pl.title('Elbow Curve')
pl.show()

推荐阅读