gpt4 book ai didi

algorithm - GMM 聚类可以包含空簇吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:51:39 26 4
gpt4 key购买 nike

假设我们要在 2 个点上训练一个 1 维 GMM 聚类算法:0,2,使用 2 个簇。假设初始化是:高斯 1:均值 1,方差 1。高斯 2:均值 5,方差 1。

运行算法后,我们会得到什么样的高斯簇?当第一个包含 2 个点时,第二个高斯是否为空?

谢谢。

最佳答案

是的,即使数据点的数量超过组件的数量,这也是可能的。您的示例不会产生空簇。相反,它将收敛于

Gaussian 1: mean=0.000000, variance=0.000001, weights=0.500000
Gaussian 2: mean=2.000000, variance=0.000001, weights=0.500000

我在下面发布了生成此代码的代码。 GMM 的密度函数如下所示:

enter image description here

GMM 使用第二个高斯的原因是,将高斯拉近 2 对模型总是有利的。这会增加第二个数据点的可能性,同时不会降低任何其他数据点的可能性数据点。您可以将高斯均值视为通过 Spring 附加到数据点。

空簇示例

这是一个示例,其中一个高斯分布导致空簇/GMM 未使用。

Data: [-0.1, 0.1, 9.9, 10.1]
Components: 3
Initial Weights: [1/3, 1/3, 1/3]
Initial Means: [0, 5, 10]
Initial Variances: [1, 1, 1]

这导致以下 GMM:

Gaussian 1: mean=-0.000000, variance=0.010001, weights=0.500000
Gaussian 2: mean=5.000000, variance=24.989993, weights=0.000000
Gaussian 3: mean=10.000000, variance=0.010001, weights=0.500000

enter image description here

代码

import numpy as np
from scipy.stats import norm
from matplotlib import pyplot as plt
from sklearn.mixture import GaussianMixture

X = np.array([-0.1, 0.1, 9.9, 10.1])
X = X.reshape((len(X), 1))
plot_xs = np.linspace(-1, 11, 1000)

gmm = GaussianMixture(n_components=3, weights_init=[1/3, 1/3, 1/3],
means_init=[[0], [5], [10]],
precisions_init=[[[1]], [[1]], [[1]]])
gmm.fit(X)

for i in range(3):
print('Gaussian %d: mean=%f, variance=%f, weights=%f'
% (i+1, gmm.means_[i], gmm.covariances_[i], gmm.weights_[i]))

# Plot
for i in range(3):
plt.plot(plot_xs, gmm.weights_[i] *
norm.pdf(plot_xs, gmm.means_[i][0], np.sqrt(gmm.covariances_[i][0][0])))
plt.show()

关于algorithm - GMM 聚类可以包含空簇吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49006111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com