Fuzzy-c-means-设置初始簇数= 6,但仅生成4个簇标签

时间:2019-07-16 11:24:31

标签: python machine-learning cluster-analysis fuzzy-c-means

我使用fuzzy-c-means聚类实现,我希望数据X形成我在算法中定义的聚类数量(我相信这是它的工作方式)。但是这种行为令人困惑。

cm = FCM(n_clusters=6)
cm.fit(X)

此代码生成带有4个标签的图-[0,2,4,6]

cm = FCM(n_clusters=4)
cm.fit(X)

此代码生成带有4个标签的图-[0,1,2,3]

当我将群集号初始化为6时,我期望标签[0,1,2,3,4,5]。

代码:

from fcmeans import FCM
from matplotlib import pyplot as plt
from seaborn import scatterplot as scatter

# fit the fuzzy-c-means
fcm = FCM(n_clusters=6)
fcm.fit(X)

# outputs
fcm_centers = fcm.centers
fcm_labels  = fcm.u.argmax(axis=1)

# plot result
%matplotlib inline
f, axes = plt.subplots(1, 2, figsize=(11,5))
scatter(X[:,0], X[:,1], ax=axes[0])
scatter(X[:,0], X[:,1], ax=axes[1], hue=fcm_labels)
scatter(fcm_centers[:,0], fcm_centers[:,1], ax=axes[1],marker="s",s=200)
plt.show()

2 个答案:

答案 0 :(得分:0)

我读了一下,看起来一旦算法达到拐点(它可以对数据执行的最大簇数),就不会创造更多的东西。所以在我的问题中,4是算法在给定数据集下执行的最大聚类数。

答案 1 :(得分:0)

模糊c均值是模糊聚类算法。

标签只是模糊分配的近似值。

最有可能的两个簇非常弱,因此永远不会赢得用于产生标签的argmax操作。这并不意味着没有使用这些聚类,只是您没有使用完整的模糊结果。