R || 高斯混合模型GMM
GMM模型的R实现 预备知识: EM算法原理 GMM算法原理 友情提示:本代码配合GMM算法原理中的步骤阅读更佳哦! 本文分为一元高斯分布的EM算法以及多元高斯分布的EM算法,分别采用两本书上的数据《统计学习方法》和《机器学习》。 一元高斯混合模型 步骤: 1、设置模型参数的初始值,以及给出测试的数据 data <- c(- 67 ,- 48 , 6 , 8 , 14 , 16 , 23 , 24 , 28 , 29 , 41 , 49 , 56 , 60 , 75 ) a = c( 0.5 , 0.5 ) #系数 u = c( 0 , 1 ) #初始均值 sigma2 =c( 9 , 9 ) #初始方差 data数据来自《统计机器学习》 2:E步 迭代计算gamma值,也就是响应度 首先利用 dnorm() 计算高斯公式的密度值, sapply() 来向量化带入函数计算 p <- t(sapply( data ,dnorm,u,sigma)) amatrix <- matrix(rep(a, N ),nrow= N ,byrow = T ) #便于计算 r = (p * amatrix) / rowSums(p * amatrix) #r(gamma):分模型k对观测数据data的响应度 M步 迭代更新均值、方差和模型系数 u <- colSums( data *r)