# 1. 实验目的
实现一个 k-means 算法和混合高斯模型,并且用 EM 算法估计模型中的参数。
# 2. 实验要求
- 用高斯分布产生 k 个高斯分布的数据(不同均值和方差)(其中参数自己设定)。
- 用 k-means 聚类,测试效果;
- 用混合高斯模型和你实现的 EM 算法估计参数,看看每次迭代后似然值变化情况,考察 EM 算法是否可以获得正确的结果(与你设定的结果比较)。
- 应用:可以 UCI 上找一个简单问题数据,用你实现的 GMM 进行聚类。
# 3. 设计思想
## 3.1 K-means 算法
k 均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是,预将数据分为 K 组,则随机选取 K 个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
算法为:先随机选取 K 个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是以下任何一个:
- 没有(或最小数目)对象被重新分配给不同的聚类。
- 没有(或最小数目)聚类中心再发生变化。
- 误差平方和局部最小。
## 3.2 GMM 算法
GMM,高斯混合模型,也可以简写为 MOG。高斯模型就是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。
GMM 相对 K-means 是比较复杂的 EM 算法的应用实现。与 K-means 不同的是,GMM 算法在 E 步时没有使用“最近距离法”来给每个样本赋类别(hard assignment),而是增加了隐变量 γ。γ 是(N,K)的矩阵, γ[N,K]表示第 n 个样本是第 k 类的概率,因此, 具有归一性。即 的每一行的元素的和值为 1。
GMM 算法是用混合高斯模型来描述样本的分布,因为在多类情境中,单一高斯分布肯定是无法描绘数据分布。多个高斯分布的简单叠加也无法描绘数据分布的。只有混合高斯分布才能较好的描绘一组由多个高斯模型产生的样本。对于样本中的任一个数据点,任一高斯模型能够产生该点的概率,也就是任一高斯模型对该点的生成的贡献(contribution)是不同的,但可以肯定的是,这些贡献的和值是 1。
# 4. 实验过程
## 4.1 算法设计
高斯分布参数:
![](https://www.writebug.com/myres/static/uploads/2022/7/30/3f5ba42ddcfeec659bb745d9dc8e99da.writebug)
E 步:
![](https://www.writebug.com/myres/static/uploads/2022/7/30/72dc7050c1f278253d4360ca2aa62083.writebug)
M 步:
![](https://www.writebug.com/myres/static/uploads/2022/7/30/062903dfbd35721b3fdf0b619f8720a8.writebug)
极大似然估计:
![](https://www.writebug.com/myres/static/uploads/2022/7/30/5dd710e8d05e59359ba972151e9ac63c.writebug)
## 4.2 实验结果
自生成数据,K-means:
![](https://www.writebug.com/myres/static/uploads/2022/7/30/c4960d30b55bdd7d8f1ecdb42ee9d767.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/30/1b2e724e5d9fb0591402ff4ab2f5efb3.writebug)
自生成数据,GMM:
图中给出了每一阶段的样本分类情况和置信椭圆。
最后带有填充的透明置信椭圆为生成数据的真实椭圆。
![](https://www.writebug.com/myres/static/uploads/2022/7/30/c89776c79611be3ce8663996a1495523.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/30/96f9d9eda87b705fe9ba706397b55524.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/30/99d98c37b07e9cbc7e8f2ac0ccd88432.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/30/466c21b9d58454c10bacea59e2053ab9.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/30/20e72ce91b2405f5889a82c910864482.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/30/23759d9f4cf3b16827cfd828bc9b84d9.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/30/4755921bdfe68665a0f8fb27e396a775.writebug)
# 5. 实验结论
K-means 和 GMM 都是 EM 算法的体现。两者共同之处都有隐变量,遵循 EM 算法的 E 步和 M 步的迭代优化。不同之处在于 K-means 给出了很多很强的假设,比如假设了所有聚类模型对总的贡献是相等的(平均的),假设一个样本由某一个特定聚类模型产生的概率是 1,其他为 0. 而 GMM 用混合高斯模型来描述聚类结果。假设多个高斯模型对总模型的贡献是有权重的,且样本属于某一类也是由概率的。两者都能较好的解决简单的分类问题,但存在着可能只取到局部最优的问题。
初值的选取对 K-means 和 GMM 的效果影响较大。K-means 的初值选取通常是给定聚类个数 k 和随机选取初始聚类中心。而对于 GMM 来说,如果初始高斯模型的均值和方差选取不好的话,可能会出现极大似然值为 0 的情况,即该样本几乎不可能由我们初始的高斯模型生成。另外在实验过程中还会出现协方差矩阵不可逆的情况。
基于Python实现k-means算法和混合高斯模型【100011756】
版权申诉
187 浏览量
2023-04-10
10:24:10
上传
评论
收藏 1.49MB ZIP 举报
神仙别闹
- 粉丝: 2674
- 资源: 7640
最新资源
- Qt开发知识、经验总结 包括Qss,数据库,Excel,Model/View等
- IV数据.xlsx
- 一些深度学习中的小例子,适合新手学习使用
- foldcraftlauncher_262944.apk
- 珍藏多年的基于matlab实现潮流计算程序源代码集合,包含多个潮流计算程序.rar
- 使用FPGA实现串-并型乘法器
- 基于matlab实现针对基于双曲线定位的DV-Hop算法中误差误差出一种基于加权双曲线定位的DV-Hop改进算法.rar
- 基于matlab实现由遗传算法开发的整数规划,车辆调度问题.rar
- 电视家7.0(对电视配置要求高).apk
- 免费计算机毕业设计-基于JavaEE的医院病历管理系统设计与实现(包含论文+源码)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈