0

我一直在使用斯坦福大学的 Andrew Ng 的材料来学习 EM 算法,链接在这里: http ://cs229.stanford.edu/notes/cs229-notes7b.pdf 我一直在尝试了解EM 通过使用 Python 库,专门用于处理 Old Faithful 数据集。链接如下: https ://mixem.readthedocs.io/en/latest/examples/old_faithful.html 这个数据集有大约272个观测值,两个变量分别是喷发时间和等待时间;其中包含喷发之间的时间信息。我对以下代码行有几个问题:

weights, distributions, ll = mixem.em(np.array(data), [
    mixem.distribution.MultivariateNormalDistribution(np.array((2, 50)), np.identity(2)),
    mixem.distribution.MultivariateNormalDistribution(np.array((4, 80)), np.identity(2)),
])

这与以下部分有关: 在此处输入图像描述 我的问题是:

  • 为什么我必须为 mu 创建两个数组以及为什么要考虑这些维度?我想第一个(2,50)第一个2是指变量的数量(爆发和等待),但是为什么要把50作为第二个维度。另外,为什么我需要 (4,80) 的数组和两个维度为 2 的身份数组?
4

1 回答 1

1

您正在尝试对问题中的数据点进行聚类。那么,当您不知道有多少个集群或哪些点属于哪个集群时,您该怎么做。这就是 EM 的用武之地。

你做了一些假设来解决聚类问题。您假设可能有 2 个集群。现在每个点都有两个维度(爆发、等待),所以你需要一个二维高斯来描述这些点的集群。由于您假设有 2 个集群,因此您创建了 2 个多元高斯。

在示例中,您使用均值 (2,50) 和恒等协方差矩阵(由恒等式 (2) 给出)创建 Gaussian1。同样,您使用均值 (4,80) 创建 Gaussian2。

为什么你为第一个高斯选择值 2 和 50?这些是任意数字,您通常在这里选择合理的数字。所以你说的是,涉及喷发的分量的平均值的初始值为 2,等待的平均值是 50。如果你查看数据集,你会发现这些都是合理的初始估计。

其余的是标准 EM。

于 2017-11-20T01:54:45.173 回答