GMM算法应⽤实例介绍及参数详解
GMM,⾼斯混合模型,也可以简写为MOG。⾼斯模型就是⽤⾼斯概率密度函数(正态分布曲线)精确地量化事物,将⼀个事物分解为若⼲的基于⾼斯概率密度函数(正态分布曲线)形成的模型。
⾼斯混合模型(CMMs)是统计学习理论的基本模型,在可视媒体领域应⽤⼴泛。近些年来,随着可视媒体信息的增长和分析技术的深⼊,GMMs 在(纹理)图像分割、视频分析、图像配准、聚类等领域有了进⼀步的发展。从GMMs的基本模型出发,从理论和应⽤的⾓度讨论和分析了GMMs的求解算法,包括EM算法、变化形式等,论述了GMMs的模型选择问题:在线学习和模型约简。在视觉应⽤领域,介绍了GMMs在图像分段、视频分析、图像配准、图像降噪等领域的扩展模型与⽅法,详细地阐述了⼀些最新的典型模型的原理与过程,如⽤于图像分段的空间约束CMMs、图像配准中的关联点漂移算法。最后,讨论了⼀些潜在的发展⽅向与存在的困难问题。
GMM在视觉分析中的应⽤
1.图像分段
⾼斯混合模型在图像分割领域应⽤⼴泛,在⼀般图像上经典过程是将像素映射到特征空间,然后假设特征空间的点由待定参数的GMMs⽣成,使⽤EM等算法计算最优的参数值以确定像素的类别。实际上,在
图像分割应⽤中GMMs被看做是⼀个聚类模型,与特征选择、聚类分析、模型选择、EM算法设计紧密相关。
2.视频分析
CMMs和相关的统计⽅法⼴泛应⽤于视频分段、⽬标识别和跟踪、错误消除,为⼿势识别、武器制导、智能交通、视频监控等应⽤提供服务。
在视频分段⽅⾯有不少的⼯作。早期, Weiss和Adelson根据相邻像素之间的某种相似性,如强度,通过马尔科夫随机场建⽴了运动分割的统⼀框架。
3.噪声消除
噪声在图像和视频中不可避免,消除噪声有利于图像与视频分割、特征提取、⽬标跟踪与识别等后期处理过程。GMMs在图像噪声消除领域多有应⽤,⼀个主要的⽅法是利⽤GMMs对图像的正交函数基分解系数建模,消除噪声(91 1999年, Wain-wright等⼈发展了⼀类多尺度随机过程来表达图像的统计本质,该随机过程定义在多解析系数树的层叠结构之上。
4.图像配准
图像配准和融合是图像和视频分析领域发展的⽅向之⼀,在医疗图像处理、航空制导、遥感图像处理、视频监控等领域应⽤⼴泛。图像配准通常建⽴在图像特征提取基础之上,常⽤的⽅法有最⼩⼆乘估计、⼩波变换、FFTE息等。CMMs和EM算法亦可⽤于(3D)图像配准,近些年来,有不少的研究成果。Chui和Rangarajan通过GMMs构建了特征点集配准映射,通过融合EM过程的模拟退⽕算法计算模型参数。
以下是关于GMM的参数和属性
参数:
n_components : int,默认为1。
混合物成分的数量。
covariance_type : {“完整”(默认),“并列”,“诊断”,“球形”}
描述要使⽤的协⽅差参数类型的字符串。必须是以下之⼀:
‘充分’
每个分量都有⾃⼰的通⽤协⽅差矩阵
‘绑’
所有分量共享相同的通⽤协⽅差矩阵
‘diag’
每个分量都有⾃⼰的对⾓协⽅差矩阵
‘球形’
每个组件都有其⾃⼰的单个⽅差
tol : float,默认为1e-3。
收敛阈值。当下限平均增益低于此阈值时,EM迭代将停⽌。
reg_covar : 浮点型,默认为1e-6。
⾮负正则化添加到协⽅差的对⾓线上。允许确保协⽅差矩阵均为正。
max_iter : int,默认为100。
要执⾏的EM迭代次数。
n_init : int,默认为1。
要执⾏的初始化次数。保持最佳结果。
init_params : {‘kmeans’,‘random’},默认为’kmeans’。
⽤于初始化权重,均值和精度的⽅法。必须是以下之⼀:
“K均值”  :责任是初始化使⽤ K均值。
“随机”  :责任是随机初始化的。
weights_init : 类似数组的形状(n_components,),可选
⽤户提供的初始权重,默认为⽆。如果为None,则使⽤init_params⽅法初始化权重。
means_init :类 数组,形状(n_components,n_features),可选
⽤户提供的初始均值,默认为None,如果为None,则使⽤该init_params⽅法初始化均值。
precisions_init : 类似数组的字段,可选。
⽤户提供的初始精度(协⽅差矩阵的倒数),默认为⽆。如果为None,则使⽤’init_params’⽅法初始化精度。形状取决
于’covariance_type’:
(n_components ,)如果是 '球形' ,
(n_features , n_features )如果是 'tied' ,
(n_components , n_features )如果是 'diag' ,
(n_components , n_features , n_features )如果是 'full'
random_state : int,RandomState实例或⽆,可选(默认值:⽆)
如果为int,则random_state是随机数⽣成器使⽤的种⼦;否则为false。如果是RandomState实例,则random_state是随机数⽣成器;如果为None,则随机数⽣成器是所使⽤的RandomState实例np.random。
warm_start : 布尔值,默认为False。
如果’warm_start’为True,则最后⼀次拟合的结果将⽤作下⼀次fit()的初始化。在类似问题上多次调⽤拟合时,这可以加快收敛速度。在这种情况下,“ n_init”将被忽略,并且在第⼀次调⽤时仅发⽣⼀次初始化。请参阅词汇表。
verbose : int,默认为0。
启⽤详细输出。如果为1,则打印当前的初始化和每个迭代步骤。如果⼤于1,则还将打印对数概率和每个步骤所需的时间。
verbose_interval : int,默认为10。
下⼀次打印之前完成的迭代次数。
属性:
weights_ : 类似数组的形状(n_components,)
每种混合物成分的重量。
means_ : 数组状,形状(n_components,n_features)
每个混合物成分的平均值。
covariances_ : 类似数组
每个混合物成分的协⽅差。形状取决于covariance_type:
(n_components ,)如果是 '球形' ,
(n_features , n_features )如果是 'tied' ,
(n_components , n_features )如果是 'diag' ,
(n_components , n_features , n_features )如果是 'full'
precisions_ : 类似数组
混合物中每种成分的精密度矩阵。精度矩阵是协⽅差矩阵的逆矩阵。协⽅差矩阵是对称正定的,因此可以通过精度矩阵等效地对⾼斯的混合进⾏参数化。存储精度矩阵⽽不是协⽅差矩阵使在测试时计算新样本的对数似然更有效率。形状取决于covariance_type:
(n_components ,)如果是 '球形' ,
(n_features , n_features )如果是 'tied' ,
(n_components , n_features )如果是 'diag' ,
(n_components , n_features , n_features )如果是 'full's parameter
precisions_cholesky_ : 类似数组
每个混合成分的精确矩阵的cholesky分解。精度矩阵是协⽅差矩阵的逆矩阵。协⽅差矩阵是对称正定的,因此可以通过精度矩阵等效地对⾼斯的混合进⾏参数化。存储精度矩阵⽽不是协⽅差矩阵使在测试时计算新样本的对数似然更有效率。形状取决于covariance_type:
(n_components ,)如果是 '球形' ,
(n_features , n_features )如果是 'tied' ,
(n_components , n_features )如果是 'diag' ,
(n_components , n_features , n_features )如果是 'full'
converged_ : 布尔
当在fit()中达到收敛时为true,否则为False。
n_iter_ : int
最适合EM达到收敛的步数。
lower_bound_ : 浮动
EM最佳拟合的对数似然(训练数据相对于模型)的下界值。
例:绘制两个⾼斯混合的密度估计。数据是从具有不同中⼼和协⽅差矩阵的两个⾼斯⽣成的。
import numpy as np
import matplotlib.pyplot as plt
lors 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 = ur(X, Y, Z, norm=LogNorm(vmin=1.0, vmax=1000.0),
levels=np.logspace(0, 3, 10))
CB = lorbar(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()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。