高斯混合模型算法
A. 什么样的高斯混合模型数据更适合em算法
应该是“过拟合”了吧。虽然在em中没有真正的“过拟合”一说,但是类别增多,每个数据点会以更高的概率分配到这些类别上。
B. 比较kmeans算法和混合高斯模型,哪个模型的聚类效果更好
kmeans得到的index索引是一个列向量,假设聚类成类,则index中只有,,这几个数
C. 最近在研究声纹识别系统 算法原理是高斯混合模型 请问有人知道哪本书里讲了高斯混合模型吗 急需啊
我建议用LABVIEW这个软件,很全面,有你想要的东西
D. 使用k-means聚类算法的优点是什么使用高斯混合模型聚类算法的优点是什么
高斯混合模型就是用高斯概率密度函数(正态分布曲线)精确地量化事物,它是一个将事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。 高斯模型就是用高斯概率密度函数(正态分布曲线)精确地量化事物
E. 基于混合高斯模型的EM算法在MATLAB中实现后,为什么输出的极大似然函数值随着聚类个数的增多而变大
应该是“过拟合”了吧。虽然在EM中没有真正的“过拟合”一说,但是类别增多,每个数据点会以更高的概率分配到这些类别上。
F. 高斯混合模型的初始化有哪些好的方法
这个问题估计很少有人会,你不用在问题标题后加个OpenCV,这个问题和绘图库无关,你可能得到有关混合高斯模型的论坛里看看,估计是算法出错或者是结果你没有处理好
G. GMM模型是什么
就是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。GMMs已经在数值逼近、语音识别、图像分类、图像去噪、图像重构、故障诊断、视频分析、邮件过滤、密度估计、目标识别与跟踪等领域取得了良好的效果。
对图像背景建立高斯模型的原理及过程:图像灰度直方图反映的是图像中某个灰度值出现的频次,也可以认为是图像灰度概率密度的估计。如果图像所包含的目标区域和背景区域相比比较大,且背景区域和目标区域在灰度上有一定的差异,那么该图像的灰度直方图呈现双峰-谷形状。
主要步骤
1、为图像的每个像素点指定一个初始的均值、标准差以及权重。
2、收集N(一般取200以上,否则很难得到像样的结果)帧图像利用在线EM算法得到每个像素点的均值、标准差以及权重)。
3、从N+1帧开始检测,检测的方法:
对每个像素点:
1)将所有的高斯核按照ω/σ降序排序
2)选择满足公式的前M个高斯核:M= arg min(ω/σ>T)
3)如果当前像素点的像素值在中有一个满足:就可以认为其为背景点。
H. em算法是什么
最大期望算法(Expectation-Maximization algorithm, EM),或Dempster-Laird-Rubin算法,是一类通过迭代进行极大似然估计(Maximum Likelihood Estimation, MLE)的优化算法 ,通常作为牛顿迭代法(Newton-Raphson method)的替代用于对包含隐变量(latent variable)或缺失数据(incomplete-data)的概率模型进行参数估计。
EM算法的标准计算框架由E步(Expectation-step)和M步(Maximization step)交替组成,算法的收敛性可以确保迭代至少逼近局部极大值 。EM算法是MM算法(Minorize-Maximization algorithm)的特例之一,有多个改进版本,包括使用了贝叶斯推断的EM算法、EM梯度算法、广义EM算法等 。
由于迭代规则容易实现并可以灵活考虑隐变量,EM算法被广泛应用于处理数据的缺测值 ,以及很多机器学习(machine learning)算法,包括高斯混合模型(Gaussian Mixture Model, GMM) 和隐马尔可夫模型(Hidden Markov Model, HMM) 的参数估计。
I. 高斯算法求分数
高斯混合模型GMM
首先介绍高斯分布的概率密度函数。一维高斯分布的概率密度函数如下:
多维变量X=(x1,x2,…xn)的联合概率密度函数为:
这里引用李航《统计学习方法》书中的定义
简而言之,GMM是多个高斯分布的加权和,并且权重α之和等于1 。
Sklearn
sklearn.mixture 是一个应用高斯混合模型进行非监督学习的包(支持 diagonal,spherical,tied,full 四种协方差矩阵)。GaussianMixture 对象实现了用来拟合高斯混合模型的期望最大 (EM) 算法。它还可以为多变量模型绘制置信椭圆体,同时计算 BIC(Bayesian Information Criterion,贝叶斯信息准则)来评估数据中聚类的数量。详情见Sklearn中文官网2.1. 高斯混合模型。
期望最大算法EM
这里引用周志华《机器学习》书中的定义
上面是基本概念。关于数学公式推导,真心建议直接看吴恩达老师的课件。这里给出自己推导的结果
示例演示
演示GMM的使用。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
from sklearn import mixture
n_samples = 300
# generate random sample, two components
np.random.seed(0)
# generate spherical data centered on (20, 20)
shifted_gaussian = np.random.randn(n_samples, 2) + np.array([20, 20])
# generate zero centered stretched Gaussian data
C = np.array([[0., -0.7], [3.5, .7]])
stretched_gaussian = np.dot(np.random.randn(n_samples, 2), C)
# concatenate the two datasets into the final training set
X_train = np.vstack([shifted_gaussian, stretched_gaussian])
# fit a Gaussian Mixture Model with two components
clf = mixture.GaussianMixture(n_components=2, covariance_type='full')
clf.fit(X_train)
# display predicted scores by the model as a contour plot
x = np.linspace(-20., 30.)
y = np.linspace(-20., 40.)
X, Y = np.meshgrid(x, y)
XX = np.array([X.ravel(), Y.ravel()]).T
Z = -clf.score_samples(XX)
Z = Z.reshape(X.shape)
CS = plt.contour(X, Y, Z, norm=LogNorm(vmin=1.0, vmax=1000.0),
levels=np.logspace(0, 3, 10))
CB = plt.colorbar(CS, shrink=0.8, extend='both')
plt.scatter(X_train[:, 0], X_train[:, 1], .8)
plt.title('Negative log-likelihood predicted by a GMM')
plt.axis('tight')
plt.show()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
运行结果
J. 混合高斯模型的高斯分布怎么来的
params.win_size=CV_BGFG_MOG_WINDOW_SIZE;//初始化阶段的帧数,这个参数的倒数就是我们知道的背景模型的更新率params.bg_threshold=CV_BGFG_MOG_BACKGROUND_THRESHOLD;//高斯背景阈值params.std_threshold=CV_BGFG_MOG_STD_THRESHOLD;//这个参数是当前面一个高斯权值的和的阈值,这样的一个阈值用来判断哪些是背景模型,哪些是前景的高斯函数,因为大家认为,不是所有的高斯分布都代表背景的,有部分代表前景params.weight_init=CV_BGFG_MOG_WEIGHT_INIT;//初始权重params.variance_init=CV_BGFG_MOG_SIGMA_INIT*CV_BGFG_MOG_SIGMA_INIT;//初始方差params.minArea=CV_BGFG_MOG_MINAREA;//最小面积,,这个参数是用来去噪的,当检测的目标矩形区域的面积小于这个minArea时,就把它当噪音去掉,这个就是去掉小目标params.n_gauss=CV_BGFG_MOG_NGAUSSIANS;//高斯模型个数,这个参数看你用几层高斯模型了,一般选3OpenCV的全称是:。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python,JavaandMATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch,Ruby的支持。