上凸优化的时候老师讲了一个问题:给定一堆样本点,如何用一个最小的椭圆把它们全部包括进来。其实就是解一个凸优化问题:
相比第二种写法,第一种写法的好处在于将二次不等式变成了仿射的。在使用CVX工具箱的时候,向量的二次不等式约束是不被接受的。
上一节的问题可以推广到用多个椭圆覆盖所有样本。当样本本身具有比较明显的聚集情况时,这样显然能更好地刻画样本的分布情况。我读到的这篇文章A Minimum Volume Covering Approach with a Set of Ellipsoids就是在解决这个问题。
如果引入E个椭圆,我们的优化问题就变成了下面的形式:
需要注意的是,由于我们引入了 η 这个离散变量,我们的优化问题不再是凸的了,无法直接用凸优化的方式求解。为了解决这个问题,文章作者采用了一种迭代算法,在每一步迭代中,需要做两件事:
1. 固定现有的 η(i) ,求解 A(i) 和 b(i) ;
2. 固定 A(i) 和 b(i) ,对样本重新划分,得到 η(i+1) ;如果新的划分跟上一轮迭代没有区别则中止迭代。
我觉得这个算法的巧妙之处在于将原来非凸的问题转化成了一些更小规模的凸优化问题,使得求解变得非常方便。不过缺点也是显而易见的:如果初始的样本划分 η(1) 没有做好,那么算法就可能收敛到一个较差的结果。这让我想起了k-means算法:同样简单实用,同样依赖于一个好的初值。
第一眼看到这个问题我的想法是用GMM(混合高斯)来做,得到高斯分布之后拿个平面一切就是一个椭圆。不过后来我又想到两者的优化目标是不一样的:椭圆覆盖问题对于处在椭圆外的样本点惩罚是无穷大(即不允许有样本没被覆盖),而混合高斯则是一个有限值。因此混合高斯对于outlier的鲁棒性肯定更高。另外由于高斯函数的特性,每一个样本点都有一定可能性属于任意一个高斯分布,也就是说 ηei 是一个[0, 1]区间内的连续值。这也是为什么混合高斯模型可以用EM算法直接求解而不用担心局部最优的问题。
原文作者也讨论了outlier的问题,做法是引入一个类似SVM里的松弛系数,然后把这个松弛系数也加进目标函数里,像下面这样