You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于颜色展示高斯混合模型(GMM)软分配的绘图实现

GMM软分配可视化实现方案

我希望基于高斯混合模型(GMM)的概率值实现软分配可视化,展示数据点在两个(或更多)聚类间的隶属关系。

我尝试使用predict_proba(X)的最大值作为概率值,通过labels*probability的方式实现,但该方法对labels=0的情况无效,相关代码如下:

ax.scatter(X[:, 0], X[:, 1], c=labels*probability)

解决思路与代码示例

双聚类场景

直接用样本对某一类的隶属概率作为颜色映射依据,搭配过渡色阶的colormap,就能直观体现每个点的软分配关系:

import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture
import numpy as np

# 生成模拟数据
np.random.seed(42)
X = np.concatenate([np.random.normal(0, 1, (100, 2)), np.random.normal(3, 1, (100, 2))])

# 拟合GMM模型
gmm = GaussianMixture(n_components=2, random_state=42)
gmm.fit(X)
# 获取每个样本对两类的隶属概率
probs = gmm.predict_proba(X)

# 绘制软分配可视化
fig, ax = plt.subplots()
# 用聚类0的隶属概率作为颜色值,coolwarm色阶体现从聚类0到聚类1的过渡
scatter = ax.scatter(X[:, 0], X[:, 1], c=probs[:, 0], cmap='coolwarm', alpha=0.7)
# 添加颜色条说明概率对应关系
plt.colorbar(scatter, label='隶属聚类0的概率')
ax.set_title('GMM双聚类软分配可视化')
plt.show()

多聚类场景

给每个聚类定义基础颜色,通过隶属概率加权混合颜色,让样本颜色直观反映对各聚类的隶属程度:

# 生成三类模拟数据
X = np.concatenate([np.random.normal(0, 1, (100, 2)), 
                    np.random.normal(3, 1, (100, 2)),
                    np.random.normal(1.5, 1, (100, 2))])

# 拟合3聚类GMM
gmm = GaussianMixture(n_components=3, random_state=42)
gmm.fit(X)
probs = gmm.predict_proba(X)

# 定义每个聚类的基础RGB颜色
base_colors = np.array([[1, 0, 0],  # 聚类0:红色
                        [0, 1, 0],  # 聚类1:绿色
                        [0, 0, 1]]) # 聚类2:蓝色

# 计算每个样本的混合颜色(概率加权求和)
sample_colors = probs @ base_colors

# 绘制可视化
fig, ax = plt.subplots()
ax.scatter(X[:, 0], X[:, 1], c=sample_colors, alpha=0.7)
ax.set_title('GMM多聚类软分配可视化')
plt.show()

原方法无效原因

labels*probability的方式中,当labels=0时,计算结果全为0,无法区分这些点对聚类0的具体隶属概率(比如是0.6还是0.9),丢失了软分配的核心信息。而上面的方法直接利用完整的隶属概率数据,能准确展示每个样本在聚类间的归属关系。

内容的提问来源于stack exchange,提问作者karas87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:55:19