我正在试图理解scikit学习高斯混合的结果
模型实现。请看以下示例:
#!/opt/local/bin/python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture
# Define simple gaussian
def gauss_function(x, amp, x0, sigma):
return amp * np.exp(-(x - x0) ** 2. / (2. * sigma ** 2.))
# Generate sample from three gaussian distributions
samples = np.random.normal(-0.5, 0.2, 2000)
samples = np.append(samples, np.random.normal(-0.1, 0.07, 5000))
samples = np.append(samples, np.random.normal(0.2, 0.13, 10000))
# Fit GMM
gmm = GaussianMixture(n_components=3, covariance_type="full", tol=0.001)
gmm = gmm.fit(X=np.expand_dims(samples, 1))
# Evaluate GMM
gmm_x = np.linspace(-2, 1.5, 5000)
gmm_y = np.exp(gmm.score_samples(gmm_x.reshape(-1, 1)))
# Construct function manually as sum of gaussians
gmm_y_sum = np.full_like(gmm_x, fill_value=0, dtype=np.float32)
for m, c, w in zip(gmm.means_.ravel(), gmm.covariances_.ravel(),
gmm.weights_.ravel()):
gmm_y_sum += gauss_function(x=gmm_x, amp=w, x0=m, sigma=np.sqrt(c))
# Normalize so that integral is 1
gmm_y_sum /= np.trapz(gmm_y_sum, gmm_x)
# Make regular histogram
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=[8, 5])
ax.hist(samples, bins=50, normed=True, alpha=0.5, color="#0070FF")
ax.plot(gmm_x, gmm_y, color="crimson", lw=4, label="GMM")
ax.plot(gmm_x, gmm_y_sum, color="black", lw=4, label="Gauss_sum")
# Annotate diagram
ax.set_ylabel("Probability density")
ax.set_xlabel("Arbitrary units")
# Draw legend
plt.legend()
plt.show()
这里我首先生成一个由高斯分布构造的样本分布,然后用高斯混合模型拟合这些数据。接下来,我要计算
某些给定输入的概率。方便的是,scikit实现提供“score\u samples”方法来实现这一点。现在我在努力
了解这些结果。我一直在想,我可以从GMM得到的高斯参数拟合和构造非常相似
通过对它们求和,然后将积分正规化为1。但是,正如您在绘图中看到的,从
score\u samples
方法与原始数据(蓝色)完全吻合(红线)
直方图),手动构造的分布(黑线)没有。我想知道我的想法哪里出错了,为什么我不能
通过对GMM给出的高斯分布求和来构造分布合身!?!非常感谢您的意见!
以防将来有人对同样的事情感到疑惑:一个人有
要使单个组件(而不是总和)标准化,请执行以下操作:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture
# Define simple gaussian
def gauss_function(x, amp, x0, sigma):
return amp * np.exp(-(x - x0) ** 2. / (2. * sigma ** 2.))
# Generate sample from three gaussian distributions
samples = np.random.normal(-0.5, 0.2, 2000)
samples = np.append(samples, np.random.normal(-0.1, 0.07, 5000))
samples = np.append(samples, np.random.normal(0.2, 0.13, 10000))
# Fit GMM
gmm = GaussianMixture(n_components=3, covariance_type="full", tol=0.001)
gmm = gmm.fit(X=np.expand_dims(samples, 1))
# Evaluate GMM
gmm_x = np.linspace(-2, 1.5, 5000)
gmm_y = np.exp(gmm.score_samples(gmm_x.reshape(-1, 1)))
# Construct function manually as sum of gaussians
gmm_y_sum = np.full_like(gmm_x, fill_value=0, dtype=np.float32)
for m, c, w in zip(gmm.means_.ravel(), gmm.covariances_.ravel(), gmm.weights_.ravel()):
gauss = gauss_function(x=gmm_x, amp=1, x0=m, sigma=np.sqrt(c))
gmm_y_sum += gauss / np.trapz(gauss, gmm_x) * w
# Make regular histogram
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=[8, 5])
ax.hist(samples, bins=50, normed=True, alpha=0.5, color="#0070FF")
ax.plot(gmm_x, gmm_y, color="crimson", lw=4, label="GMM")
ax.plot(gmm_x, gmm_y_sum, color="black", lw=4, label="Gauss_sum", linestyle="dashed")
# Annotate diagram
ax.set_ylabel("Probability density")
ax.set_xlabel("Arbitrary units")
# Make legend
plt.legend()
plt.show()
1)概述 正太分布也叫高斯分布,正太分布的概率密度曲线也叫高斯分布概率曲线_。_ GaussianMixtureModel(混合高斯模型,GMM)。 聚类算法大多数通过相似度来判断,而相似度又大多采用欧式距离长短作为衡量依据。而GMM采用了新的判断依据:概率,即通过属于某一类的概率大小来判断最终的归属类别。 GMM的基本思想就是:任意形状的概率分布都可以用多个高斯分布函数去近似,也就是说GMM就是
校验者: @why2lyj @Shao Y. 翻译者: @glassy sklearn.mixture 是一个应用高斯混合模型进行非监督学习的包,支持 diagonal,spherical,tied,full 四种协方差矩阵 (注:diagonal 指每个分量有各自不同对角协方差矩阵, spherical 指每个分量有各自不同的简单协方差矩阵, tied 指所有分量有相同的标准协方差矩阵, ful
现有的高斯模型有单高斯模型(SGM)和高斯混合模型(GMM)两种。从几何上讲,单高斯分布模型在二维空间上近似于椭圆,在三维空间上近似于椭球。 在很多情况下,属于同一类别的样本点并不满足“椭圆”分布的特性,所以我们需要引入混合高斯模型来解决这种情况。 1 单高斯模型 多维变量X服从高斯分布时,它的概率密度函数PDF定义如下: 在上述定义中,x是维数为D的样本向量,mu是模型期望,sigm
混合高斯 (Mixtures of Gaussians) 和期望最大化算法(the EM algorithm) 在本章讲义中,我们要讲的是使用期望最大化算法(EM,Expectation-Maximization)来进行密度估计(density estimation)。 一如既往,还是假设我们得到了某一个训练样本集${x^{(1)},...,x^{(m)}}$。由于这次是非监督学习(unsuper
主要内容:示例在高斯模糊操作中,图像与高斯滤波器而不是盒式滤波器卷积。 高斯过滤器是一个低通过滤器,可以消除高频分量的减少。 可以使用类的方法在图像上执行此操作。 以下是这种方法的语法 - 该方法接受以下参数 - src - 表示此操作的源(输入图像)的对象。 dst - 表示此操作的目标(输出图像)的对象。 ksize - 表示内核大小的对象。 sigmaX - 类型变量表示方向上的高斯核标准差。 示例 以下
问题内容: 我有一个直方图(请参见下文),我试图找到均值和标准差以及适合于我的直方图的曲线的代码。我认为SciPy或matplotlib中有一些可以帮助您的东西,但是我尝试过的每个示例都不起作用。 问题答案: 看一下将任意曲线拟合到数据的答案。基本上,您可以使用它来使您想要的任何功能适合您的数据。下面的代码显示了如何使高斯拟合某些随机数据(此SciPy-User邮件列表帖子的贷方)。
我正在尝试复制混合模式。目前我已经重新创建了一个屏幕混合模式,但它似乎不能很好地工作与透明图像。 我有两种纹理 图1(前景) 图片2(背景) 我得到的结果是 计算机着色器代码 我如何将图像与不同的阿尔法正确地混合在一起?
Android/H5混合试验过程 在创建和编辑试验时,建议使用Chrome浏览器,以达到最佳体验。 在这部分中,我们将以优化页面上的一个标题的文案,预期提升转化为例,来说明如何使用编程模式试验。先通过一张简单的流程图了解所需的步骤,再一步步进行具体操作: 1 试验方案 一个完整的A/B 测试需要根据目前已有的用户数据进行分析判断,推断并建立假设,才能针对性的做出改变和调整,根据具体需求,构建产品A