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

从混合高斯分布生成二维样本数据集的代码问题求助

你当前代码的问题是分别独立生成X、Y两个一维混合正态分布,X和Y的分量选择没有关联,所以无法形成聚类的簇效果。你需要生成的是二维高斯混合分布,每个样本的X、Y同属一个分量,才能得到预期的散点聚类效果。

调整后的代码如下,参数完全沿用你原来设置的X、Y分量均值、方差和占比,交叉后得到4个二维分量,和示例图效果匹配:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# 定义二维高斯混合的4个分量参数:(均值[mu_x, mu_y], 协方差矩阵, 分量占比)
components = [
    ([1, 3], [[4, 0], [0, 1]], 0.18),   # 对应X分量1+Y分量1,占比0.3*0.6=0.18
    ([1, 6], [[4, 0], [0, 4]], 0.12),   # 对应X分量1+Y分量2,占比0.3*0.4=0.12
    ([4, 3], [[1, 0], [0, 1]], 0.42),   # 对应X分量2+Y分量1,占比0.7*0.6=0.42
    ([4, 6], [[1, 0], [0, 4]], 0.28),   # 对应X分量2+Y分量2,占比0.7*0.4=0.28
]
n = 1000
p_list = [item[2] for item in components]
points = []

for _ in range(n):
    # 按占比选择当前样本所属的分量
    z_i = np.argmax(np.random.multinomial(1, p_list))
    mu, cov, _ = components[z_i]
    # 从该二维高斯分量采样得到(x,y)点
    x_i, y_i = np.random.multivariate_normal(mu, cov)
    points.append((x_i, y_i))

# 拆分x、y向量绘图
x, y = zip(*points)
plt.scatter(x, y, s=8, alpha=0.7)
plt.show()

如果需要调整簇的形状、倾斜角度,可以修改协方差矩阵的非对角元素实现X、Y维度的相关性;调整簇的位置直接修改对应分量的均值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:45:05