全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
11928 4
2012-02-02


转自:数据分析博客

这几天赶着实现基于混合高斯模型的Bag-of-Viswords方法去获取图像特征,没想到,简单的混合高斯模型被我折腾出一大堆问题,查了一下相关文献,这还真是混合高斯模型在高维空间应用的种种缺陷。

关于混合高斯模型就不说了,没啥特别的地方,但将混合高斯模型用于图像语义特征抽取还是挺有意思的。这是来自于文本检索的一个技术。对于图像训练集,首先使用各种方法(比如,SIFT)提取出局部区域特征(比如车子的轮子,房间的窗户等等),一幅图像大概有几百至几千个特征不等吧,把所有图像的局部特征放在一起,那这个特征就多了去了,在我的实验中大概10万个向量,对这10万个向量做一下聚类,比如假设有300个质心,于是10万个特征就被划分到300个类别中。我现在认为,这300个类别的代表就构成了一个“词典”,显然,质心就是最自然的代表。

下一步,将每幅图像的特征在这300个质心上做直方图,就是说,和哪个质心最近(欧氏距离最简单了)就划归到哪个类别中去,这样这幅图像就被表达成维度为300的定长特征了。所有的图像都这么抽取特征之后,使用分类器就可以很容易分类。

在聚类过程中,最容易想到的那就是kmeans了,简单、直观。但有更好的方法,那就是用概率方法,比如高斯混合模型。混合高斯模型优于kmeans的地方就不多说了,地球人都知道。但没想到的是,在这种高维大样本的情形下出现的毛病特别多,总结如下:

1、协方差矩阵奇异问题。这是混合高斯模型的老问题了,在迭代中如果出现某类(概率的)样本特别少的情形,会导致协方差矩阵奇异,这时计算高斯PDF是不可能了,协方差逆不存在,不存在?那就regularize它,事实上很多文献就是这么推荐的。

2、高斯函数密度全为0。这个是典型的高维空间问题了,在高维空间一点点扰动就有可能造成两点之间的距离呈指数级的增长,从而导致所有类别高斯PDF趋近于0。这个问题一度让我很困惑,因为为了减少参数数量,我是使用对角矩阵来逼近样本的协方差的(不这么干会内存不够),那这时候就出现了“类中样本少了方差太小有问题,样本多了方差太大也有问题”的两难境地。经过研究MATLAB自带的gmdistribution.fit函数算是暂时解决了这个问题,但心里还是不很踏实。

3、计算复杂度问题。本来嘛,使用EM算法估计GMM参数复杂度就比kmeans要高,现在可好了,样本大(100,000),高斯分量多(300),这意味着啥问题?意味簇与簇之间的重合覆盖可能会很大啊,这个迭代次数显著增长。悲剧的是,这么大的规模每次迭代时间是很可观的。同样的训练,kmeans一分钟,GMM两小时以上(没有实际计算,反正出去吃了饭吹会牛,回来还没算完,再看个一集friends差不多了)。

3、更悲剧的问题:参数终于估计完了,代入直方图,使用支持向量机一分类,比使用kmeans得到的精度差了1%!真心的希望是我的算法编写错了...但是,过年了,再也hold不住了,爱咋咋地吧...


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-2-2 17:43:33
是不是发错地方了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-3-31 09:48:57
想问一下协方差矩阵出现奇异怎么解决呢?regularize具体是怎么做的?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-12-22 11:20:03
高斯混合模型适用什么情况的啊?谢谢啊网上找不到资料的
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-11-1 00:06:10
malixiajingjing 发表于 2013-3-31 09:48
想问一下协方差矩阵出现奇异怎么解决呢?regularize具体是怎么做的?
我用的matlab里的gmdistribution.ft函数。
mixn = gmdistribution.fit(x,cluster,'Options',options,'Regularize',0.000000000000005);
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群