如何在Python模糊聚类图中展示‘模糊性’
模糊C均值聚类的模糊性可视化方案
你说得对,硬预测标签(0/1)只能区分聚类归属,没法体现边界点的模糊性。要展示这种模糊程度,核心是用soft_predict()返回的隶属度概率来映射颜色。
关键思路
soft_prediction_labels是一个形状为(样本数, 聚类数)的数组,每个元素代表对应样本属于某聚类的隶属度。对于2聚类场景,你可以取其中一类的隶属度作为颜色变量——因为两个聚类的隶属度和为1,取任意一列都能反映样本的模糊程度:隶属度越接近1,说明样本越明确属于该聚类;越接近0.5,说明样本处于聚类边界,模糊性越高。
修改后的完整代码
import pandas as pd import matplotlib.pyplot as plt from fcmeans import FCM # 读取数据(修正原代码的变量名错误&DataFrame索引问题) data = pd.read_csv("my_data.csv") # 转成numpy数组方便索引(或者用data.iloc[:,0]) data_np = data.values # 训练FCM模型 model = FCM(n_clusters=2) model.fit(data_np) cntrs = model.centers soft_prediction_labels = model.soft_predict(data_np) # 绘制散点图:用第一类的隶属度作为颜色依据 plt.scatter(data_np[:, 0], data_np[:, 1], c=soft_prediction_labels[:, 0], s=30, cmap='coolwarm', alpha=0.7) # 绘制红色聚类中心 plt.scatter(cntrs[:,0], cntrs[:,1], c='red', s=100, marker='X') # 添加颜色条,标注隶属度含义 plt.colorbar(label='隶属度(属于第一类的概率)') plt.xlabel('特征1') plt.ylabel('特征2') plt.title('模糊C均值聚类的模糊性可视化') plt.show()
代码说明
- 修正了原代码中
model和my_model的变量名不一致问题,以及DataFrame直接用[:,0]索引的错误。 c=soft_prediction_labels[:,0]:用样本属于第一类的隶属度控制颜色,coolwarm色系会让隶属度高的点偏红,低的偏蓝,中间值(边界点)呈过渡色。alpha=0.7:增加透明度,让重叠点的模糊性展示更清晰。- 颜色条直接标注含义,方便理解颜色对应的模糊程度。
内容的提问来源于stack exchange,提问作者CasperCodes
相关产品推荐
相关产品推荐

