Ali*_*Ali 3 python machine-learning k-means apache-spark 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()
Run Code Online (Sandbox Code Playgroud)
我用另一种方式做到了。使用 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()
Run Code Online (Sandbox Code Playgroud)