14、EM算法实战

本文介绍了高斯混合模型的实现,包括底层代码编写和利用库进行实现。在底层代码部分,详细讲解了数据生成、全局变量初始化、E步(期望更新)和M步(最大化)。在M步中,固定期望计算均值和混合系数。通过可视化输出,观察聚类效果。此外,还展示了调用库实现高斯混合模型,加载数据集,计算类别均值、方差,并评估模型准确率,最终绘制出结果图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高斯混合模型的底层代码

import math
import copy
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D(3D建模)

生成数据方法
将数据点X使用全局变量处理,方便后续程序调用
将均值mu设置为全局变量,进行随机初始化,方便后面计算期望
将期望excep设置为全局变量,方便后续计算
将混合系数设置为全局变量,方便后续计算

def generate_data(sigma(用一个协方差矩阵把多个方差代表出来), N, mu1, mu2, mu3, mu4, alpha):
    global X  # 可观测数据集
    X = np.zeros(全零矩阵)((N, 2))  # 初始化X,2行N列。2维数据,N个样本
    X = np.matrix(X)
    global mu  # 随机初始化mu1,mu2,mu3,mu4
    mu = np.random.random((4, 2))
    mu = np.matrix(mu)
    global excep  # 期望第i个样本属于第j个模型的概率的期望
    excep = np.zeros((N, 4))
    global alpha_  # 初始化混合项系数
    alpha_ = [0.25, 0.25, 0.25, 0.25]
    for i in range(N):
        if np.random.random(1) < 0.1:  # 生成0-1之间随机数
            X[i, :] = np.random.multivariate_normal(mu1, sigma, 1)  # 用第一个高斯模型生成2维数据
        elif 0.1 <= np.random.random(1) < 0.3:
            X[i, :] = np.random.multivariate_normal(mu2, sigma, 1)  # 用第二个高斯模型生成2维数据
        elif 0.3 <= np.random.random(1) < 0.6:
            X[i, :] = np.random.multivariate_normal(mu3, sigma, 1)  # 用第三个高斯模型生成2维数据
        else:
            X[i, :] = np.random.multivariate_normal(mu4, sigma, 1)  # 用第四个高斯模型生成2维数据

#     print("可观测数据:\n",X)       #输出可观测样本
#     print("初始化的mu1,mu2,mu3,mu4:",mu)      #输出初始化的mu

E步:
获取全局变量,固定均值、方差及聚类数量,更新期望数值

def e_step(sigma, k, N):
    global X
    global mu
    global excep
    global alpha_
    #遍历每一个样本
    for i in range(N): # 聚类样本数
        denom = 0
        # 每一个样本进行各
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T o r

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值