Regularized Gaussian Covariance Estimation(学习Free Mind知识整理)

时间:2021-04-08 16:55:01


阅读http://freemind.pluskid.org/machine-learning/regularized-gaussian-covariance-estimation/文章中的一些知识整理:

====================================================================

非常感谢Free Mind能够这么耐心的分析解释完一个理论,文章分析很透彻啊,受益匪浅。

“除非某个维度上的坐标全部是相等的,否则 Covariance 矩阵对角线上的元素都能保证大于零,也就不会出现 singular 的情况了。“难道把某个维度坐标去重复后就不会出现singular情况了?

=====================================================================

“一般来说,使用对角线的协方差矩阵是一种不错的降低模型复杂度的方式”

解释:


Regularized Gaussian Covariance Estimation(学习Free Mind知识整理)

          Training samples. Regularized Gaussian Covariance Estimation(学习Free Mind知识整理)       Spherical Covariance. Regularized Gaussian Covariance Estimation(学习Free Mind知识整理)         Diagonal Covariance. Regularized Gaussian Covariance Estimation(学习Free Mind知识整理)             Full Covariance.


import numpy as np
import pylab as pl
from sklearn import mixture

n_samples = 300
c_types = ['full', 'diag', 'spherical']

np.random.seed(0)
C = np.array([[0., -0.7], [3.5, 1.7]])
X_train = np.dot(np.random.randn(n_samples, 2), C)

pl.figure(dpi=100,figsize=(3,3))
pl.scatter(X_train[:, 0], X_train[:, 1], .8)
pl.axis('tight')
pl.savefig('GaussianFit-data.svg')
pl.close()

for c_type in c_types:
clf = mixture.GMM(n_components=1, covariance_type=c_type)
clf.fit(X_train)

x = np.linspace(-15.0, 20.0, num=200)
y = np.linspace(-10.0, 10.0, num=200)
X, Y = np.meshgrid(x, y)
XX = np.c_[X.ravel(), Y.ravel()]
Z = np.log(-clf.eval(XX)[0])
Z = Z.reshape(X.shape)

pl.figure(dpi=100,figsize=(3,3))
CS = pl.contour(X, Y, Z)
pl.scatter(X_train[:, 0], X_train[:, 1], .8)

pl.axis('tight')
pl.savefig('GaussianFit-%s.svg' % c_type)
pl.close()

====================================================================

“对于矩阵求逆或者解方程的时候出现 singular 的情况,加上一个也算是数值上的一种标准处理方式,叫做Tikhonov Regularization,Ridge Regression 本身也可以通过这个角度来解释。”跟稀疏那篇文章中提到的处理方法是类似的,岭回归确实是个很有说服力的解释吧。

====================================================================

最大后验估计(MAP)可以看做贝叶斯估计的一种特定形式。MAP与MLE(最大似然 估计)最大区别是MAP中加入了模型参数本身的概率分布或者说MLE中认为模型参数本身的概率的是均匀的,即该概率为一个固定值。

Conjugate prior-共轭先验的解释 可以看这个小插曲http://blog.csdn.net/polly_yang/article/details/8250161

终于看完了,然后看到如果看不下去的可以:

如果碰到估计 Gaussian 的协方差矩阵时结果 singular 的情况,解决方法一般有两种:

  1. 直接限制协方差矩阵的结构,比如要求它是一个对角阵,这种情况下数据的各个维度将会是独立的,所以可以把每个维度看成一个一维的 Gaussian 分布来单独进行估计。
  2. 在估计出来的协方差矩阵的对角线上统一加上一个很小的正数,使得它变成正定的。这种方法的合理性可以通过正则化或者 MAP 估计来进行解释。

然后再补充几点不知道该放在哪里的注意事项:

  • prior、posterior 和 likelihood 比较容易搞混淆,记住 prior 和 posterior 都是关于参数(比如我们这里就是)的分布,prior 是我们所假设的参数本来的分布,而 posterior 则是在观察到训练数据之后得到的条件分布。而 likelihood 则完全不一样,一方面它是关于数据 的,另一方面它没有被归一化,所以也并不是一个合法的概率分布。
  • 标量值函数关于矩阵变量的求导原理上其实就是和多元标量值函数求导一样的,不过求起来非常繁琐,一般不会自己算,网上可以找到一个叫做《Matrix Cookbook》的小册子,里面有搜集了各种常用的矩阵求导的公式,基本上直接从那里查询就可以解决大部分问题了。

====================================================================

最后再次感谢一下Free Mind博主