matplotlib 如何在模糊聚类图Python中显示“模糊性”

tjjdgumg  于 2022-12-13  发布在  Python
关注(0)|答案(1)|浏览(154)

我有一个正态分布的2D数据集,我使用fcmeans库来执行模糊c-均值聚类。我可以用红色的点来表示聚类中心。但是,我需要在出现模糊的地方显示一个梯度。我不知道如何在Python中实现这一点,我在网上也找不到类似的东西。

from fcmeans import FCM

data = pd.read_csv("my_data.csv")

model = FCM(n_clusters=2) 
model.fit(data) 

centers = my_model.centers
hard_prediction_labels = my_model.predict(data)
soft_prediction_labels = my_model.soft_predict(data)

plt.scatter(data[:, 0], data[:, 1], c=hard_prediction_labels, s=30);
plt.scatter(data[:, 0].mean(), data[:, 1].mean(), s=60, c='red', label = 'Cntrds');

我相信我的错误来自于我的标签是1或0的事实;但是,我不确定如何定义它,以确定哪些点是边界。我可以使用soft_predict()函数从软预测中获得概率(数据点属于每个聚类的概率),但是我不确定如何使用它创建颜色渐变。

nukf8bse

nukf8bse1#

假设你已经计算了(n_points, n_clusters)数组prob,当n_clusters为2时,看起来像

print(prob)
# 0.61 0.39
# 0.55 0.45
# .... ....
# 0.07 0.93

然后你可以这样做,当你有一个更高的概率属于它的集群时,有一个更不透明的点,当它有一个较低的概率时,有一个更透明的点。我想这是你想要的...

n_clusters = 2
...
for cluster in range(n_clusters):
    plt.scatter(data[hard_prediction_labels==cluster, 0],
                data[hard_prediction_labels==cluster, 1],
                s=30,
                alpha=0.8*prob[hard_prediction_labels==cluster, cluster])
    plt.scatter(data[hard_prediction_labels==cluster, 0],
                data[hard_prediction_labels==cluster, 1],
                s=5,
                alpha=1.0)

NB我没有fcmeans,所以我的代码未经测试,基本上是基于有根据的推测。你可能需要调整一些东西使它工作。

编辑
用不同的大小和透明度对每个数据簇绘制两次,可能会给予数据更直观。

相关问题