首页 > 编程语言 >简单易学的机器学习算法——EM算法

简单易学的机器学习算法——EM算法

时间:2023-06-28 15:34:33浏览次数:48  
标签:EM random xrange denominator numerator sigma 算法 miu 易学


简单易学的机器学习算法——EM算法_似然函数

简单易学的机器学习算法——EM算法_期望最大化算法_02

简单易学的机器学习算法——EM算法_期望最大化算法_03

(图片来自参考文章1)

简单易学的机器学习算法——EM算法_EM_04

简单易学的机器学习算法——EM算法_EM_05

简单易学的机器学习算法——EM算法_机器学习_06

简单易学的机器学习算法——EM算法_期望最大化算法_07

Python代码


#coding:UTF-8
'''
Created on 2015年6月7日

@author: zhaozhiyong
'''
from __future__ import division
from numpy import *
import math as mt
#首先生成一些用于测试的样本
#指定两个高斯分布的参数,这两个高斯分布的方差相同
sigma = 6
miu_1 = 40
miu_2 = 20

#随机均匀选择两个高斯分布,用于生成样本值
N = 1000
X = zeros((1, N))
for i in xrange(N):
    if random.random() > 0.5:#使用的是numpy模块中的random
        X[0, i] = random.randn() * sigma + miu_1
    else:
        X[0, i] = random.randn() * sigma + miu_2

#上述步骤已经生成样本
#对生成的样本,使用EM算法计算其均值miu

#取miu的初始值
k = 2
miu = random.random((1, k))
#miu = mat([40.0, 20.0])
Expectations = zeros((N, k))

for step in xrange(1000):#设置迭代次数
    #步骤1,计算期望
    for i in xrange(N):
        #计算分母
        denominator = 0
        for j in xrange(k):
            denominator = denominator + mt.exp(-1 / (2 * sigma ** 2) * (X[0, i] - miu[0, j]) ** 2)
        
        #计算分子
        for j in xrange(k):
            numerator = mt.exp(-1 / (2 * sigma ** 2) * (X[0, i] - miu[0, j]) ** 2)
            Expectations[i, j] = numerator / denominator
    
    #步骤2,求期望的最大
    #oldMiu = miu
    oldMiu = zeros((1, k))
    for j in xrange(k):
        oldMiu[0, j] = miu[0, j]
        numerator = 0
        denominator = 0
        for i in xrange(N):
            numerator = numerator + Expectations[i, j] * X[0, i]
            denominator = denominator + Expectations[i, j]
        miu[0, j] = numerator / denominator
        
    
    #判断是否满足要求
    epsilon = 0.0001
    if sum(abs(miu - oldMiu)) < epsilon:
        break
    
    print step
    print miu
    
print miu



最终结果


[[ 40.49487592  19.96497512]]


参考文章:

1、(EM算法)The EM Algorithm

2、数学期望(http://wenku.baidu.com/view/915a9c1ec5da50e2524d7f08.html?re=view)




标签:EM,random,xrange,denominator,numerator,sigma,算法,miu,易学
From: https://blog.51cto.com/u_16161414/6572467

相关文章

  • 简单易学的机器学习算法——AdaBoost
    是符号函数。具体过程可见下图所示:(图片来自参考文件1)三、AdaBoost算法流程  上述为AdaBoost的基本原理,下面给出AdaBoost算法的流程:(来自参考文献2)四、实际的例子  AdaBoost算法是一种具有很高精度的分类器,其实AdaBoost算法提供的是一种框架,在这种框架......
  • 优化算法——截断梯度法(TG)
    一、L1正则的表达形式  在机器学习中,几乎无人不知无人不晓L1正则与L2正则,L1正则与L2正则都有参数控制的作用,对模型起到约束的作用,防止过拟合。但是L1正则与L2正则也有区别,L1正则更容易产生稀疏解,使得某些参数等于0,而L2正则却没有这样的优势,只能使得参数趋近于0。利用这样的优势......
  • element-ui 去除input的框
    ::v-deep{.el-input__inner{border:0;border-radius:0px;//&:focus{//border-bottom:1pxsolid#409eff;//}}.el-textarea__inner{resize:none;/*这个是去掉textarea下面拉伸的那个标志,如下......
  • C# 避免使用System.Environment.CurrentDirectory
    我有一个程序A(exe)是通过计划任务程序启动,发现通过System.Environment.CurrentDirectory获取的路径不是程序A的运行目录,而是C:\Windows\System32DirectoryInfotopDir=Directory.GetParent(System.Environment.CurrentDirectory);是因为System.Environment.CurrentDirectory......
  • Kubernetes编程——client-go基础—— TypeMeta
    TypeMetahttps://github.com/kubernetes/apimachinery/blob/release-1.27/pkg/runtime/types.go runtime.Object只是一个接口,我们想了解它具体时间怎么实现的。k8s.io/api中的Kubernetes对象通过内嵌k8s.io/apimachinery/meta/v1中的metav1.TypeMeta结构,为schema.Obj......
  • 利用freemarker和minIO生成文章详情html并存入minIO
    packagecom.heima.article.test;importcom.alibaba.fastjson.JSONArray;importcom.baomidou.mybatisplus.core.toolkit.StringUtils;importcom.baomidou.mybatisplus.core.toolkit.Wrappers;importcom.heima.article.ArticleApplication;importcom.heima.article.......
  • 使用 SQLAlchemy 库来实现对 MySQL 数据库的增删改查
    在 Flask 中使用SQLAlchemy库来实现对MySQL数据库的增删改查fromflaskimportFlask,request,jsonifyfromflask_sqlalchemyimportSQLAlchemyapp=Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI']='mysql://username:password@localhost/dbname'ap......
  • ​​动态规划算法
    以下是一个用C++实现的动态规划算法来解决最长子序列问题(LongestCommonSubsequence)的示例代码:#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intlongestCommonSubsequence(stringtext1,stringtext2){intm=text1.length();......
  • docker报错:Error response from daemon: driver failed programming external connect
    重启docker-compose时,nginx服务报错。报错信息:Errorresponsefromdaemon:driverfailedprogrammingexternalconnectivityonendpointlikeshop-nginx(f0a809481f5016e6f7ca6e1ed826b0676d5523b15f2954a2d22c03c12a89567d):Bindfor0.0.0.0:80failed:portisalr......
  • linux D-bus安装与测试demo
    因为linux下通过bluez进行ble开发需要运用到D-bus,但此前对此一窍不通,现开始学习D-bus相关知识。首先便从安装开始在此过程中参考如下两篇博客博客1:这里 博客2:这里首先是进行D-bus各种安装,挨个执行如下指令sudoapt-getinstalldbussudoapt-getinstalld-feetsudoap......