基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码

1.算法运行效果图预览

(完整程序运行后无水印)


2.算法运行软件版本

程序运行配置环境:


人工智能算法python程序运行环境安装步骤整理-CSDN博客




3.部分核心程序

(完整版代码包含部分中文注释和操作步骤视频)


       for z in range(k):

           err       += (abs(Old_mu[z, 0] -mu[z, 0]) + abs(Old_mu[z, 1] - mu[z, 1]) + abs(Old_mu[z, 2] - mu[z, 2]))  #计算误差

           err_alpha += abs(Old_alpha[z] - alpha_[z])

           err_cov   += abs(Old_cov[z,0,0] -sigma4_[z,0,0])+abs(Old_cov[z,0,1] - sigma4_[z,0,1])+abs(Old_cov[z,0,2] -sigma4_[z,0,2])+abs(Old_cov[z,1,0] - sigma4_[z,1,0])+abs(Old_cov[z,1,1] -sigma4_[z,1,1])+abs(Old_cov[z,1,2] - sigma4_[z,1,2])+abs(Old_cov[z,2,0] -sigma4_[z,2,0])+abs(Old_cov[z,2,1] - sigma4_[z,2,1])+abs(Old_cov[z,2,2] -sigma4_[z,2,2])


       if (err <= 0.001) and (err_alpha < 0.001):  #达到精度退出迭代

           print(err, err_alpha)

           break


       Learn_process[i] = err;

       alpha_process[i] = err_alpha;

       cov_process[i]  = err_cov;



   print("observable data:\n", X)  #输出可观测样本

   order = np.zeros(N)

   color = ['b', 'r', 'y']

   ax = plt.figure().add_subplot(111, projection='3d')

   for i in range(N):

        for j in range(k):

            if excep[i, j] == max(excep[i, :]):

                 order[i] = j  #选出X[i,:]属于第几个高斯模型

                 probility[i] +=alpha_[int(order[i])] * math.exp(-(X[i, :] - mu[j, :]) * sigma.I *np.transpose(X[i, :] - mu[j, :])) / (np.sqrt(np.linalg.det(sigma)) * 2 *np.pi)  #计算混合高斯分布

                 ax.scatter(X[i, 0], X[i, 1],X[i, 2],c=color[int(order[i])], s=25 ,marker='.')

                 plt.title('classfiy random 3Dgenerated data from R,G,B')

                 ax.set_xlabel('x')

                 ax.set_ylabel('y')

                 ax.set_zlabel('z')



   plt.show()






   plt.plot(Learn_process[2:iter_num]);

   plt.title('Learning process:error')

   plt.xlabel('Iteration numbers')

   plt.ylabel('error')

   plt.show()






   plt.plot(alpha_process[2:iter_num]);

   plt.title('Learning process:alpha')

   plt.xlabel('Iteration numbers')

   plt.ylabel('alpha error')

   plt.show()






   plt.plot(cov_process[2:iter_num]);

   plt.title('Learning process:cov')

   plt.xlabel('Iteration numbers')

   plt.ylabel('cov error')

   plt.show()





4.算法理论概述

      EM期望最大化算法是一种用于含有隐变量(latent variable)的概率模型参数估计的迭代算法。在许多实际问题中,数据的生成过程可能涉及一些无法直接观测到的变量,这些变量被称为隐变量。例如在混合高斯模型(Gaussian Mixture Model,GMM)中,每个数据点具体来自哪个高斯分布就是一个隐变量。EM算法通过交替执行两个步骤:E步(期望步)和M步(最大化步),逐步逼近最优的参数估计。


4.1 EM算法



      这是因为在E步中,我们计算的是在当前参数下关于隐变量的期望,而在M步中,我们通过最大化这个期望来更新参数,使得似然函数单调递增。理论上,当似然函数的变化小于某个阈值时,算法收敛到局部最优解。


4.2 GMM模型

      混合高斯模型(Gaussian Mixture Model,简称 GMM) 是一种概率模型,通过将数据视为由多个高斯分布(正态分布)的加权组合而生成,适用于聚类、密度估计、数据分布建模等场景。相比常见的 K-Means 聚类,混合高斯模型能够捕捉到数据分布的方差差异和协方差结构。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • """1.个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单,如“Hello ...
    她即我命阅读 8,519评论 0 5
  • 为了让我有一个更快速、更精彩、更辉煌的成长,我将开始这段刻骨铭心的自我蜕变之旅!从今天开始,我将每天坚持阅...
    李薇帆阅读 5,941评论 0 3
  • 似乎最近一直都在路上,每次出来走的时候感受都会很不一样。 1、感恩一直遇到好心人,很幸运。在路上总是...
    时间里的花Lily阅读 5,211评论 0 2
  • 1、expected an indented block 冒号后面是要写上一定的内容的(新手容易遗忘这一点); 缩...
    庵下桃花仙阅读 3,541评论 0 1
  • 一、工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具 【M】移动工具 【V...
    墨雅丫阅读 3,514评论 0 0