机器学习——EM算法实践

机器学习基础算法31-EM实践 目录1.EM算法的实现2.EM算法估算GMM的参数3.GMM调参:covariance_type4.EM算法无监督分类鸢尾花数据5.GMM/DPGMM(贝叶斯高斯分布)比较 1.EM算法的实现 import numpy as np from scipy.stats import multivariate_normal from sklearn.mixture import GaussianMixture from mpl_toolkits.mplot3d import Axes3D import matpl 阅读详情

EM

在这里插入代码片

import numpy as np
from scipy.stats import multivariate_normal
from sklearn.mixture import GaussianMixture
from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
import matplotlib.pyplot as plt
from sklearn.metrics.pairwise import pairwise_distances_argmin

mpl.rcParams[‘font.sans-serif’] = [u’SimHei’]
mpl.rcParams[‘axes.unicode_minus’] = False

if name == ‘main’:
style = ‘myself’

np.random.seed(0)
mu1_fact = (0, 0, 0)
cov1_fact = np.diag((1, 2, 3))
data1 = np.random.multivariate_normal(mu1_fact, cov1_fact, 400)
mu2_fact = (2, 2, 1)
cov2_fact = np.array(((1, 1, 3), (1, 2, 1), (0, 0, 1)))
data2 = np.random.multivariate_normal(mu2_fact, cov2_fact, 100)
data = np.vstack((data1, data2))
y = np.array([True] * 400 + [False] * 100)

if style == 'sklearn':
    g = GaussianMixture(n_components=2, covariance_type='full', tol=1e-6, max_iter=1000)
    g.fit(data)
    print '类别概率:\t', g.weights_[0]
    print '均值:\n', g.means_, '\n'
    print '方差:\n', g.covariances_, '\n'
    mu1, mu2 = g.means_
    sigma1, sigma2 = g.covariances_
else:
    num_iter = 100
    n, d = data.shape
    # 随机指定
    # mu1 = np.random.standard_normal(d)
    # print mu1
    # mu2 = np.random.standard_normal(d)
    # print mu2
    mu1 = data.min(axis=0)
    mu2 = data.max(axis=0)
    sigma1 = np.identity(d)
    sigma2 = np.identity(d)
    pi = 0.5
    # EM
    for i in range(num_iter):
        # E Step
        norm1 = multivariate_normal(mu1, sigma1)
        norm2 = multivariate_normal(mu2, sigma2)
        tau1 = pi * norm1.pdf(data)
        tau2 = (1 - pi) * norm2.pdf(data)
        gamma = tau1 / (tau1 + tau2)

        # M Step
        mu1 = np.dot(gamma, data) / np.sum(gamma)
        mu2 = np.dot((1 - gamma), data) / np.sum((1 - gamma))
        sigma1 = np.dot(gamma * (data - mu1).T, data - mu1) / np.sum(gamma)
        sigma2 = np.dot((1 - gamma) * (data - mu2).T, data - mu2) / np.sum(1 - gamma)
        pi = np.sum(gamma) / n
        print i, ":\t", mu1, mu2
    print '类别概率:\t', pi
    print '均值:\t', mu1, mu2
    print '方差:\n', sigma1, '\n\n', sigma2, '\n'

# 预测分类
norm1 = multivariate_normal(mu1, sigma1)
norm2 = multivariate_normal(mu2, sigma2)
tau1 = norm1.pdf(data)
tau2 = norm2.pdf(data)

fig = plt.figure(figsize=(13, 7), facecolor='w')
ax = fig.add_subplot(121, projection='3d')
ax.scatter(data[:, 0], data[:, 1], data[:, 2], c='b', s=30, marker='o', depthshade=True)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title(u'原始数据', fontsize=18)
ax = fig.add_subplot(122, projection='3d')
order = pairwise_distances_argmin([mu1_fact, mu2_fact], [mu1, mu2], metric='euclidean')
print order
if order[0] == 0:
    c1 = tau1 > tau2
else:
    c1 = tau1 < tau2
c2 = ~c1
acc = np.mean(y == c1)
print u'准确率:%.2f%%' % (100*acc)
ax.scatter(data[c1, 0], data[c1, 1], data[c1, 2], c='r', s=30, marker='o', depthshade=True)
ax.scatter(data[c2, 0], data[c2, 1], data[c2, 2], c='g', s=30, marker='^', depthshade=True)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title(u'EM算法分类', fontsize=18)
plt.suptitle(u'EM算法的实现', fontsize=21)
plt.subplots_adjust(top=0.90)
plt.tight_layout()
plt.show()

GMM

import numpy as np
from sklearn.mixture import GaussianMixture
from sklearn.model_selection import train_test_split
import matplotlib as mpl
import matplotlib.colors
import matplotlib.pyplot as plt

mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False
# from matplotlib.font_manager import FontProperties
# font_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)
# fontproperties=font_set


def expand(a, b):
    d = (b - a) * 0.05
    return a-d, b+d


if __name__ == '__main__':
    data = np.loadtxt('HeightWeight.csv', dtype=np.float, delimiter=',', skiprows=1)
    print data.shape
    y, x = np.split(data, [1, ], axis=1)
    x, x_test, y, y_test = train_test_split(x, y, train_size=0.6, random_state=0)
    gmm = GaussianMixture(n_components=2, covariance_type='full', random_state=0)
    x_min = np.min(x, axis=0)
    x_max = np.max(x, axis=0)
    gmm.fit(x)
    print '均值 = \n', gmm.means_
    print '方差 = \n', gmm.covariances_
    y_hat = gmm.predict(x)
    y_test_hat = gmm.predict(x_test)
    change = (gmm.means_[0][0] > gmm.means_[1][0])
    if change:
        z = y_hat == 0
        y_hat[z] = 1
        y_hat[~z] = 0
        z = y_test_hat == 0
        y_test_hat[z] = 1
        y_test_hat[~z] = 0
    acc = np.mean(y_hat.ravel() == y.ravel())
    acc_test = np.mean(y_test_hat.ravel() == y_test.ravel())
    acc_str = u'训练集准确率:%.2f%%' % (acc * 100)
    acc_test_str = u'测试集准确率:%.2f%%' % (acc_test * 100)
    print acc_str
    print acc_test_str

    cm_light = mpl.colors.ListedColormap(['#FF8080', '#77E0A0'])
    cm_dark = mpl.colors.ListedColormap(['r', 'g'])
    x1_min, x1_max = x[:, 0].min(), x[:, 0].max()
    x2_min, x2_max = x[:, 1].min(), x[:, 1].max()
    x1_min, x1_max = expand(x1_min, x1_max)
    x2_min, x2_max = expand(x2_min, x2_max)
    x1, x2 = np.mgrid[x1_min:x1_max:500j, x2_min:x2_max:500j]
    grid_test = np.stack((x1.flat, x2.flat), axis=1)
    grid_hat = gmm.predict(grid_test)
    grid_hat = grid_hat.reshape(x1.shape)
    if change:
        z = grid_hat == 0
        grid_hat[z] = 1
        grid_hat[~z] = 0
    plt.figure(figsize=(9, 7), facecolor='w')
    plt.pcolormesh(x1, x2, grid_hat, cmap=cm_light)
    plt.scatter(x[:, 0], x[:, 1], s=50, c=y, marker='o', cmap=cm_dark, edgecolors='k')
    plt.scatter(x_test[:, 0], x_test[:, 1], s=60, c=y_test, marker='^', cmap=cm_dark, edgecolors='k')

    p = gmm.predict_proba(grid_test)
    print p
    p = p[:, 0].reshape(x1.shape)
    CS = plt.contour(x1, x2, p, levels=(0.1, 0.5, 0.8), colors=list('rgb'), linewidths=2)
    plt.clabel(CS, fontsize=15, fmt='%.1f', inline=True)
    ax1_min, ax1_max, ax2_min, ax2_max = plt.axis()
    xx = 0.9*ax1_min + 0.1*ax1_max
    yy = 0.1*ax2_min + 0.9*ax2_max
    plt.text(xx, yy, acc_str, fontsize=18)
    yy = 0.15*ax2_min + 0.85*ax2_max
    plt.text(xx, yy, acc_test_str, fontsize=18)
    plt.xlim((x1_min, x1_max))
    plt.ylim((x2_min, x2_max))
    plt.xlabel(u'身高(cm)', fontsize='large')
    plt.ylabel(u'体重(kg)', fontsize='large')
    plt.title(u'EM算法估算GMM的参数', fontsize=20)
    plt.grid()
    plt.show()
机器学习笔记(十)EM算法及实践(以混合高斯模型(GMM)为例来次完整的EM) EM算法简介,讲述了EM的算法原理及思想,用混合高斯模型(GMM)为例完成了一个完整的EM过程,还有GMM算法的Python实践。 阅读详情

相关推荐

机器学习中的期望最大化算法(EM算法)探究及R语言实践

机器学习中有许多复杂的算法,其中期望最大化算法(Expectation-Maximization algorithm,简称EM算法)被广泛应用于参数估计、聚类分析和概率模型等领域。本文将详细介绍EM算法的理论基础,并结合R语言提供一个实例,以帮助读者更好地理解和应用EM算法。需要注意的是,EM算法可能陷入局部最优解,因此在实际应用中需要结合领域知识和多次运行等策略来得到更可靠的结果。在M步中,根据E步计算得到的隐变量的期望,通过最大化似然函数来更新参数估计值。希望本文对读者理解和应用EM算法有所帮助!

syntax_api860的博客 357

EM算法:数学推导+实例演示

EM算法:数学推导+实例演示

Axlsss的博客 2330

myLearn:机器学习算法

myLearn make:生成可执行文件 demo.sh:调试入口 model.conf:模型参数 从线性到非线性模型 1、线性回归,岭回归,Lasso回归,局部加权线性回归 2、logistic回归,softmax回归,最大熵模型 3、广义线性模型 4、Fisher线性判别和线性感知机 5、三层神经网络 6、支持向量机 统计概率模型 1、高斯判别分析 2、朴素贝叶斯 3、隐马尔可夫模型 4、最大熵马尔科夫模型 5,条件随机场 6,马尔科夫决策过程 树模型 1、决策树 ID3,C4.5,CART 2、随机森林RF 3、Adaboost 4、GBDT 5、XGboost 6、孤立森林(异常检测) 聚类模型 1、层次聚类 2、原型聚类-K-means 3、模型聚类-GMM 4、EM算法-LDA主题模型 5、密度聚类-DBSCAN 6、图聚类-谱聚类 特征工程 1、特征工程 2、特征提取 3、特

大白话EM算法--从此爱上EM迭代

本系列讲解EM及GMM相关知识点,让你对EM整理流程有清晰的认识,从而应用到工作和面试中。目录如下:1.1EM算法之回顾最大似然估计1.2EM算法之回顾贝叶斯估计1.3EM算法之回顾K-means算法1.4EM算法之算法目标引入1.5EM算法之目标函数转换--利用Jensen不等式1.6EM算法之目标函数求解--关于Q(z, θ)的表达1.7EM算法流程1.8EM算法案例1.9EM算法应用之GMM(高斯混合模型)的目标函数表示1.10EM算法应用之GMM(高斯混合模型)的迭代过程1.11EM算法代码之手动实现GMM迭代过程1.12EM算法代码之基于sklearn身高性别数据GMM高斯混合聚类实现

EM算法一个实例展示

一个EM算法的简单实例展示,背景,算法边界和运算结果对比都很清楚,包含代码分析

Python实现EM算法实例代码

EM算法实例 通过实例可以快速了解EM算法的基本思想,具体推导请点文末链接。图a是让我们预热的,图b是EM算法的实例。 这是一个抛硬币的例子,H表示正面向上,T表示反面向上,参数θ表示正面朝上的概率。硬币有两个,A和B,硬币是有偏的。本次实验总共做了5组,每组随机选一个硬币,连续抛10次。如果知道每次抛的是哪个硬币,那么计算参数θ就非常简单了,如 下图所示: 如果不知道每次抛的是哪个硬币呢?那么,我们就需要用EM算法,基本步骤为: &emsp;&emsp;1、给θ_AθA​和θ_BθB​一个初始值; &emsp;&emsp;2、(E-step)估计每组实验是硬币A的概率(本组实验是硬币B的概率=1-本组实验是硬币A的概率)。分别计

期望最大化(EM)算法:从理论到实战全解析

本文深入探讨了期望最大化(EM)算法的原理、数学基础和应用。通过详尽的定义和具体例子,文章阐释了EM算法在高斯混合模型(GMM)中的应用,并通过Python和PyTorch代码实现进行了实战演示。

TechLead 5391

Anomalib实战:从零开始构建自定义数据集的异常检测模型

本文详细介绍了如何使用Anomalib 2.1.0从零开始构建自定义数据集的异常检测模型。通过实战演示,指导读者准备符合规范的数据集结构,快速上手训练Patchcore等先进算法,并完成模型推理与调优,为工业质检、医疗影像等场景提供高效的视觉异常检测解决方案。

weixin_29165465的博客 109

机器学习 | 揭示EM算法和马尔可夫链的实际应用

EM算法是一种求解含有隐变量的概率模型参数的迭代算法。该算法通过交替进行两个步骤:E步骤和M步骤,从而不断逼近模型的最优参数值。EM算法也称期望最大化算法,它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM)等等。

ztK63LrD的博客 2560

Python实战:超分辨率图像质量评估全攻略——PSNR、SSIM、LPIPS与NIQE的代码实现与优化

本文详细介绍了在Python中实现超分辨率图像质量评估的完整方案,涵盖PSNR、SSIM、LPIPS和NIQE四大核心指标。通过模块化代码设计、多进程并行处理和GPU加速优化,帮助开发者构建高效、可扩展的评估系统,并提供了实战避坑指南与结果解读方法。

weixin_29053073的博客 476

Spring Boot 构建war 部署到tomcat下无法在Nacos中注册服务

因此,当使用外部容器时,如此处的 Tomcat 来部署项目,AbstractAutoServiceRegistration 就不能监听到容器启动事件了,也就不会尝试向服务注册中心注册当前这个微服务,那么注册就失败了,并且也就没有异常信息了。自定义获取获取外部容器端口的方法, 然后监听应用启动事件,当应用被启动时,获取外部容器启动的端口号,然后将这个 port 设置到 NacosAutoServiceReigistration 中。在启动类同级目录,复制下面代码即可(不需要修改,直接构建war即可)

ttyy1112的专栏 2519

聚类之EM算法

定义:在统计计算中,最大期望(EM)算法是在概率模型中(E步)寻找参数最大似然估计或者最大后验估计(M步)的算法,其中概率模型依赖于无法观测的隐藏变量(LatentVar...

lsxxx2011的专栏 948

WorkVisual传输程序报错_发现一个内部错误

WorkVisual传输程序报错_发现一个内部错误

qq_16401025的博客 2459

机器学习基础算法29-EM实践

文章目录1.EM算法的实现2.EM算法估算GMM的参数3.GMM调参:covariance_type4.EM算法无监督分类鸢尾花数据5.GMM/DPGMM(贝叶斯高斯分布)比较 1.EM算法的实现 import numpy as np from scipy.stats import multivariate_normal from sklearn.mixture import GaussianMixture from mpl_toolkits.mplot3d import Axes3D import mat

柳杰的博客 680

在MATLAB中将C语言代码转化为可执行的mexw64文件

这样,您可以将高效的C语言算法集成到MATLAB环境中,以便更好地利用MATLAB的功能和特性。请记住,在使用mex转换C语言代码之前,您需要正确编写和测试C语言代码,并确保它与MATLAB的mex接口兼容。MATLAB是一种功能强大的数值计算软件,它提供了一个机制,可以将C语言代码转化为MATLAB可执行的mexw64文件。在上述命令中,"-output"选项指定生成的mex文件的名称,"myfunction"是您选择的名称,"myfunction.c"是要编译的C语言源文件。步骤1:编写C语言代码。

CodeRoarX的博客 1428

地图自定义编码CSV转换成ini文件

创 建 schema.ini 文件:有时,当您尝试使用 .csv 文件将自定义地理信息导入 Tableau 时,您可能会看到“无法使用.csv,因为它不包含唯一列”错误消息。这是因为您的 .csv 文件可能包含数值数据,例如数值邮政编码。对于新的地理角色,Tableau 将只接受文本字段。但是,您可以创建一个 schema.ini 文件,以指示 Tableau 应将您要导入的数值字段视为文本字段。...

wenyusuran的专栏 1975

机器学习中的EM算法解析与实践

该平台无需复杂环境配置,输入简单需求即可获得完整可运行项目,特别适合算法学习和快速验证。通过可视化结果可以直观理解EM算法的迭代优化过程,深入掌握这一经典机器学习方法的核心思想。EM(Expectation-Maximization)算法是处理含有隐变量概率模型参数估计的经典方法。这种交替优化的方式被称为坐标上升法,通过不断抬高似然函数的下界来逼近最优解。在实际应用中,GMM常用于数据聚类、密度估计和新颖点检测等任务。引入logsumexp技巧提高计算稳定性。协方差矩阵需要保证正定性。

BlackironWolf89的博客 602

【数据集】CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率)

CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率)

WW、forever的博客 402

机器学习算法进阶——EM算法理论、实践

EM算法理论、实践EM算法最大似然估计Jensen不等式(f是凸函数)EM算法引入EM算法的提出从理论公式推导GMM EM算法 最大似然估计 【按照MLE的过程分析】 【化简对数似然函数】 【参数估计的结论】 Jensen不等式(f是凸函数) EM算法引入 【随机变量无法直接(完全)观测到】 【建立目标函数】 【第一步:估算数据来自哪个组份】 【第二步:估计每个组份的参数】 EM算法的提出 【通过最大似然估计建立目标函数】 、 从理论公式推导GMM ...

qq_42873479的博客 380

小论文/大论文必备| YOLO26热力图可视化,支持8种常用热力图方法:GradCAM,GradCAMPlusPlus,XGradCAM,EigenCAM,HiResCAM等,助力小论文和大论文加分

本文介绍了如何为YOLO26模型添加热力图可视化功能,包括完整代码和使用教程。热力图能增强模型的可解释性,适用于论文中的实验对比和结果展示。文章提供了详细的代码实现,包含图像处理、热力图生成和结果可视化等功能,并指导用户如何创建Python文件、粘贴代码以及调整参数生成最佳热力图。通过设置不同层号,用户可以灵活控制热力图效果,最终结果将保存在指定文件夹中。

Ai缝合怪、助力小伙伴高效发论文 495

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

机器学习之--EM算法及实践

原理:https://www.cnblogs.com/Gabby/p/5344658.html 高斯混合模型实践:   主要公式应用公式(推导省略):         import numpy as np import matplotlib.pyplot as plt dataset = np.mat([170,165,162,159,173,169,165,170,172,1...

weixin_30651273的博客 193

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

机器学习算法实践-算法原理-EM算法(一)-初识EM以及相关概念

转载请标明出处http://blog.youkuaiyun.com/zhaohang_1/article/details/52809504,谢谢合作!网上也是看了好几个大牛写过的文章,后来发现每个人的出发点不一样,大多是从数学角度上先来阐述原理的,然后完全复写了“E”和“M”过程,对于我这种刚上研究生数学底子有点差的人来说实在有点太过晦涩,我也是在读了各家关于EM的表述后想尽量做到对小白讲明白“EM”算法。不...

自信,就总会有好事儿! 944

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

机器学习算法实践-算法原理-EM算法(二)-推导和证明

发现之前写的那一篇EM算法的分析还是不够条理和清晰,在我后来分析的过程中,重新写了一篇文档,应该还算是比较清晰和条理好多,至于上一篇,可以当作是EM的预备知识吧,略看略读一下就好,有些概念清楚了之后看这一篇推导应该还是可以轻松一些的,这一篇里尽可能也是没有多说废话把原理讲清楚,特此把EM再在这里分享一下。...

自信,就总会有好事儿! 553

视频教程-大白话EM算法--从此爱上EM迭代-机器学习

大白话EM算法--从此爱上EM迭代 李虎,联想集团PCSD业务UDS平台推荐...

weixin_34643062的博客 368
上一篇: 机器学习——EM算法
下一篇: 机器学习——贝叶斯网络
CoderMateng
博客等级 码龄7年 8粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值