你是一家互联网大厂的数据科学家,正在参与一个客户细分项目。你的任务是基于客户的行为数据,识别出不同类型的客户群体,以便制定个性化的营销策略。由于数据具有复杂的分布形态,传统的聚类算法(如 K-Means)无法有效地捕捉数据的潜在结构。你决定使用高斯混合模型(Gaussian Mixture Model, GMM)来对数据进行聚类。 请你编写一个程序,使用 NumPy 和 SciPy 库,对给定的二维数据集进行基于期望最大化算法(EM算法)的高斯混合模型聚类。具体要求如下: 1. 读取输入数据集,包含 ( N ) 个数据点,每个数据点有两个特征(二维坐标)。 2. 读取高斯混合模型的参数:聚类数 ( K )、迭代次数 ( T )。 3. 初始化模型参数: • 均值向量 ( ) 初始化为随机从数据点中选择。 • 协方差矩阵 ( ) 初始化为单位矩阵,不需要对协方差矩阵正则化。 • 混合系数 ( ) 初始化为均等分布。 4. 使用 EM 算法迭代 ( T ) 次,每次包括: • E 步骤:计算每个数据点属于每个高斯成分的后验概率(责任度)。 • M 步骤:更新模型参数 ( )、( )、( )。 5. 在迭代完成后,根据最大后验概率,为每个数据点分配聚类标签。 6. 输出每个数据点的聚类标签,标签为从 0 开始的整数。
输入描述:
    •    第一行包含一个整数 ( N ),表示数据点的数量。    •    接下来的 ( N ) 行,每行包含两个浮点数,表示数据点的二维坐标,用空格分隔。    •    最后一行包含两个整数 ( K ) 和 ( T ),用空格分隔。


输出描述:
    •    输出 ( N ) 行,每行包含一个整数,表示对应数据点的聚类标签。
示例1

输入

8
1.0 2.0
2.0 1.0
1.5 1.5
8.0 8.0
9.0 8.0
8.5 9.0
0.0 0.0
9.0 9.0
2 10

输出

1
1
0
1
1
1
0
1

备注:
•    高斯混合模型(GMM)高斯混合模型是由多个高斯分布的线性组合而成,用于描述数据的概率分布。GMM 的概率密度函数为:其中:    •    ( K ) 是高斯成分的数量(聚类数)。    •    (  ) 是第 ( k ) 个高斯成分的混合系数,满足 ()。    •    ( ) 是均值为 (  )、协方差为 () 的多元高斯分布。多元高斯分布公式为:\;=\;\frac{1}{(2\pi)^{\frac{D}{2}}\;\bigl\boldsymbol{\Sigma}\bigr^{\frac{1}{2}}}\;\exp\!\Bigl(\!-\tfrac12\,(\mathbf{x}-\boldsymbol{\mu})^{\mathsf{T}}\;\boldsymbol{\Sigma}^{-1}\;(\mathbf{x}-\boldsymbol{\mu})\Bigr)," 其中:• 表示 D 维随机向量;• 为均值向量;• 为协方差矩阵(对称正定矩阵);• 表示协方差矩阵 \boldsymbol{\Sigma} 的行列式;• 表示协方差矩阵的逆矩阵。•    E 步骤(Expectation):计算第 ( i ) 个数据点属于第  k  个高斯成分的后验概率(责任度):{\sum_{j=1}^{K} \pi_j \mathcal{N}(\mathbf{x}_i \mid \mu_j, \Sigma_j)}" •    M 步骤(Maximization):更新模型参数:其中, 。•    在 E 步骤计算责任度时,可能会遇到数值下溢的问题。可以在计算概率密度时添加一个小的常数,如 1e-6,防止除零错误。•    由于初始化和算法中涉及随机性,为了保证结果的一致性,请在程序中设置随机种子:np.random.seed(0)
加载中...