统计学习方法第九章作业:三硬币EM算法、GMM高维高斯混合模型 代码实现
三硬币EM算法
import numpy as np
import mathclass Three_coin:def __init__(self,pai=0.0,p=0.0,q=0.0):self.pai = paiself.p = pself.q = qdef comput_y_sita(self,y):return self.pai*self.p**y*(1-self.p)**(1-y) + (1-self.pai)*self.q**y*(1-self.q)**(1-y)def log_P_Y_sita(self,X):result = 0for x in X:result += math.log(self.comput_y_sita(x))return resultdef compute_ui(self,y):return self.pai*self.p**y*(1-self.p)**(1-y)/self.comput_y_sita(y)def fit(self,X,max_iter):self.n = len(X)for i in range(max_iter):p_u1 = np.array([self.compute_ui(x)*x for x in X])ui = np.array([self.compute_ui(x) for x in X])q_ui = np.array([(1 - self.compute_ui(x))*x for x in X])self.pai = 1/self.n*sum(ui)self.p = sum(p_u1)/sum(ui)self.q = sum(q_ui)/sum(1-ui)def main():X = [1,1,0,1,0,0,1,0,1,1]Three_coin_ = Three_coin(0.46,0.55,0.67)Three_coin_.fit(X,10)print(Three_coin_.pai,Three_coin_.p,Three_coin_.q)if __name__ == '__main__':main()
###result########################
/usr/bin/python3 /Users/zhengyanzhao/PycharmProjects/tongjixuexi/shixian2/three_coin_model.py
0.461862835113919 0.5345950037850112 0.6561346417857326
GMM高维高斯混合模型
import math
import numpy as npclass Gausian_EM:def __init__(self,Y,k):self.k = kself.Y = np.array(Y)self.feature_num = len(Y[0])self.N = len(Y)self.uk = []self.sik = []for i in range(k):self.uk.append(np.random.rand(self.feature_num))self.sik.append(np.random.rand(self.feature_num,self.feature_num))self.ak = np.array([1/k]*k)self.rjk = np.zeros((self.N,k)) + 0.001def caculate_y_sita(self,y,k_index):covdet = np.linalg.det(self.sik[k_index] + np.eye(self.feature_num) * 0.001)covinv = np.linalg.inv(self.sik[k_index] + np.eye(self.feature_num) * 0.001)denominator = ((2*math.pi)**self.feature_num * np.abs(covdet))**(1/2)numerator = np.exp(-0.5*((y-self.uk[k_index]).dot(covinv).dot(y-self.uk[k_index])))return numerator/denominatordef compute_log_likelihood(self):result = 0for y in self.Y:result += np.log(np.array(np.sum([self.caculate_y_sita(y,k)*self.ak[k] for k in range(self.k)])))return resultdef fit(self,max_iter):for iter in range(max_iter):log_likelihood = self.compute_log_likelihood()for n in range(self.N):denominator = np.sum([self.ak[k] * self.caculate_y_sita(self.Y[n], k) for k in range(self.k)])for k_index in range(self.k):self.rjk[n][k_index] = self.ak[k_index]*self.caculate_y_sita(self.Y[n], k_index)/denominatorfor k in range(self.k):self.ak[k] = np.sum([self.rjk[j][k] for j in range(self.N)])/float(self.N)self.sik[k] = np.sum([self.rjk[j][k]*((self.Y[j]-self.uk[k]).reshape(self.feature_num,1).dot((self.Y[j]-self.uk[k]).reshape(1,self.feature_num))) \for j in range(self.N)],axis=0)/np.sum([self.rjk[j][k] for j in range(self.N)])print([self.Y[j]*self.rjk[j][k] for j in range(self.N)])self.uk[k] = np.sum([self.Y[j]*self.rjk[j][k] for j in range(self.N)],axis=0)/np.sum([self.rjk[j][k] for j in range(self.N)])## print('---------------------------')# print(self.ak)# print(self.sik)# print(self.uk)new_log_likelihood = self.compute_log_likelihood()if new_log_likelihood - log_likelihood < 0.0001:print('small fit')breakdef predict(self,x):return np.argmax([self.caculate_y_sita(x,k) for k in range(self.k)])def main():X = []Y = []with open('../data/iris.data', 'r') as f:for i in f:data = i.split(',')X.append([float(j) for j in data[:4]])Y.append(data[4])Y = [1 if i == 'Iris-setosa\n' else 0 for i in Y]Gausian_EM_ = Gausian_EM(X,2)Gausian_EM_.fit(50)print([Gausian_EM_.predict(x) for x in X])print(Y)if __name__ == '__main__':main()#####result###################################
……
---------------------------
[0.33332862 0.66667138]
[array([[0.12176211, 0.09828544, 0.01581506, 0.01033654],[0.09828544, 0.14226048, 0.01144559, 0.01120903],[0.01581506, 0.01144559, 0.02950403, 0.00558421],[0.01033654, 0.01120903, 0.00558421, 0.01126411]]), array([[0.43497483, 0.12094219, 0.44886966, 0.16550395],[0.12094219, 0.10961752, 0.14138142, 0.07923294],[0.44886966, 0.14138142, 0.674851 , 0.28587703],[0.16550395, 0.07923294, 0.28587703, 0.17863612]])]
[array([5.00600713, 3.41801571, 1.46400229, 0.24399922]), array([6.26198756, 2.871996 , 4.90597454, 1.67599028])]
small fit
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
统计学习方法第九章作业:三硬币EM算法、GMM高维高斯混合模型 代码实现相关推荐
- 统计学习方法读书笔记(九)-EM算法及其推广
全部笔记的汇总贴:统计学习方法读书笔记汇总贴 EM算法用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计.EM算法的每次迭代由两步组成:E步,求期望(ex ...
- 统计学习方法 第九章笔记: EM 算法
文章目录 三硬币模型 EM推导背景 EM算法步骤 EM算法的导出 EM算法的收敛性 如果概率模型都是观测变量,那么给定数据就可以用极大似然估计法或者贝叶斯估计发去获得模型.但是,有时候概率模型既有观测 ...
- 李航/徐亦达 统计学习方法第九章EM算法及其推广总结和习题答案
强烈推荐徐亦达老师关于EM算法的讲解视频,本文根据徐老师和李航老师统计学习方法整理,由于公式推导太多,笔记为手写.其中包含混合高斯模型的理解,形象化解释,以及习题链接. 习题 习题9.1和9.3 习题 ...
- 统计学习方法第二章作业:感知机模型原始形式与对偶形式代码实现
原始形式实现 import numpy as np import matplotlib.pyplot as pltclass Perceptron_orginal:def __init__(self, ...
- 语音识别学习日志 2019-7-14 语音识别基础知识准备2 {EM算法与混合高斯模型(Gaussian mixture model, GMM)}
https://blog.csdn.net/lin_limin/article/details/81048411会对GMM和EM做详细介绍 本文参考: http://www.ituring.com.c ...
- 统计学习方法 第一章 学习心得
统计学习方法 第一章 学习心得 以下可能有不当之处,请各位朋友停步指正,先谢过各位. 上一帖子说道,统计学习方法的三要素: 模型.策略.算法. 模型:模型的假设空间 策略:模型的选择准则,即:定义最优 ...
- EM算法 估计混合高斯模型参数 Python实现
EM算法 估计混合高斯模型参数 Python实现 EM算法是一种用来解决含有隐变量问题的算法,混合高斯模型中对于某个数据我们并不知道是来自于哪个模型,因此可以视为隐 变量,故可以采用隐含高斯模型来求解 ...
- EM算法推断混合高斯模型参数
EM算法推断混合高斯模型参数 写在前面 随机生成混合高斯模型的数据 EM算法估计混合高斯分布的参数 初始化, E步骤 EM算法,M步骤 测试脚本 画出随机产生的数据的实际分布 画出推断得到的分布 写在 ...
- 统计学习方法第八章作业:分类问题AdaBoost算法、回归问题提升树算法 代码实现
分类问题AdaBoost算法 import math import numpy as npclass Adaboost_tree:def __init__(self,X,Y,feature_type= ...
最新文章
- apache2.4中layout模块和ssi模块的冲突
- mobile former测试
- 解决Eclipse中文乱码
- Linux内核分析第一周——计算机是如何工作的
- 怎样在SQL Server上部署SSIS包 2
- Microsoft Updater Application Block 1.2.1 核心设计(core design) [翻译]
- 如何从Mac删除Bing重定向
- nvarchar和varchar的区别
- cetos7 网卡名字命名规则_Linux 中如何启用和禁用网卡?
- 【节能学院】油烟浓度在线监测仪在浙江省某市餐饮油烟监测治理项目中的应用
- 中兴MF667S WCDMA猫Linux拨号笔记
- 安卓10自带录屏_荣耀v10怎么录屏?荣耀v10三种录屏方法
- Windows虚拟内存不足问题的处理
- Unix传奇历史与回忆-读史使人明智,鉴以往而知未来
- 解决ubuntu无法连接网络问题
- 身体质量指数(Body Mass Index,BMI)是根据人的体重和身高计算得出的一个数字,BMI对大多数人来说,是相当可靠的身体肥胖指标,其计算公式为:,其中体重单位为公斤,身高单位为米。编写程序
- 如何使用C语言播放音乐
- 基于matlab的手写体数字识别系统
- 【移动机器人技术】move_base中障碍物无法清除的解决办法
- 【hihocoder1430】 A Boring Problem
热门文章
- [development][PCRE] old PCRE
- Pyhton学习——Day9
- HDU2015校赛 The Country List
- SQL Server 2014 安装小记
- eclipse log4j 日志直接定位到source
- C#之基本知识和语法3 - 数据类型
- python 倒计时_Excel制作竞答倒计时器
- 激光SLAM学习--数据处理和特征提取
- mastercam2019安装教程
- flask项目从本地迁移到服务器上遇到net::ERR_CONNECTION_R问题