白话机器学习算法(十一) EM(附三个硬币模型代码)

本文以简单易懂的方式介绍EM(期望最大化)算法的思想,通过K-means聚类和GMM(高斯混合模型)为例,阐述如何用参数和数据估计参数。文章建议读者通过三个硬币模型、GMM实际执行过程和EM的数学证明来逐步理解EM算法。
摘要由CSDN通过智能技术生成

EM有很多公式推导,这里还是先说下EM思想,前面说过EM是最大似然估计的思路,但是他的方法是用 参数与数据  去估计 参数,直到估计出的参数基本正确;

很多初学的对EM感到困惑,常常被一堆公式所迷惑,这样不利于深入理解EM,在此我也不想用一堆公式去推倒这个思想的数学证明;我只想给初学EM的读者一个感性的认识以及一些学习建议:

拿K-means来做个例子,我们要求的是聚类中心,我们是怎么做的呢?我们假设若一个聚类中心,然后通过这些聚类中心去得到某些东西,然后我们通过得到这些东西再去更新聚类中心;放到GMM模型中,就是我们假设某个参数,然后通过这个参数得到某个中间变量,再用这个中间变量去更新参数!

如果你还不能理解? 

在概率中我们一个数据的期望是不是可以用成我们观测数据的均值去估计,如果两者一致,就叫无偏估计,好了,这是一个统计与估计相互验证的问题,GMM中就是这样一个思路:数据的统计与估计相互验证,我猜个参数,用参数去进行统计,再用统计值对参数进行估计!(再次强调我这里说的不是EM的证明,EM的证明指的的为什么我这么做最后能趋向于正确!是一个收敛性证明!)

 

如果你想从感性到理性逐渐理解:

建议你首先看看三个硬币模型,再去看下GMM的实际执行过程,再去看下EM的证明,结合起来,相信很快就能理解!

下面是EM算法在三个硬币模型中的代码

<
机器学习中最常用的数学工具是线性代数、微积分和概率论。下面是一些基本的数学概念和 Python 代码示例: 1. 向量和矩阵 向量是一列数字,矩阵是一个二维数组。在 Python 中,可以使用 NumPy 库来创建和操作向量和矩阵。 ```python import numpy as np # 创建向量 v = np.array([1, 2, 3]) # 创建矩阵 m = np.array([[1, 2], [3, 4], [5, 6]]) # 矩阵乘法 result = np.dot(m, v) print(result) ``` 2. 梯度下降 梯度下降是一种优化算法,用于最小化损失函数。在 Python 中,可以使用 NumPy 和 SciPy 库来实现梯度下降算法。 ```python import numpy as np from scipy.optimize import minimize # 定义损失函数 def loss_function(w, X, y): y_hat = np.dot(X, w) return np.mean((y_hat - y) ** 2) # 定义梯度函数 def gradient(w, X, y): y_hat = np.dot(X, w) return np.dot(X.T, y_hat - y) / len(y) # 使用梯度下降算法求解 X = np.array([[1, 2], [3, 4], [5, 6]]) y = np.array([1, 2, 3]) w0 = np.zeros(X.shape[1]) res = minimize(loss_function, w0, args=(X, y), jac=gradient) print(res.x) ``` 3. 偏导数和梯度 偏导数是多元函数中某个变量的导数,梯度是多元函数的导数向量。在 Python 中,可以使用 SymPy 库来计算偏导数和梯度。 ```python from sympy import symbols, diff # 定义符号变量和函数 x, y = symbols('x y') f = x ** 2 + y ** 3 # 计算偏导数 df_dx = diff(f, x) df_dy = diff(f, y) print(df_dx, df_dy) # 计算梯度 grad = [diff(f, var) for var in [x, y]] print(grad) ``` 4. 概率分布和随机变量 概率分布是随机变量可能取值的概率分布。在 Python 中,可以使用 SciPy 库来计算概率分布和随机变量。 ```python from scipy.stats import norm # 定义正态分布 mu, sigma = 0, 1 dist = norm(mu, sigma) # 计算概率密度函数和累积分布函数 x = np.linspace(-3, 3, 1000) pdf = dist.pdf(x) cdf = dist.cdf(x) # 生成随机变量 samples = dist.rvs(1000) ``` 以上是一些基本的数学概念和 Python 代码示例。在机器学习中,还会涉及到更高级的数学工具,如矩阵分解、优化理论、贝叶斯统计等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值