问题标签 [expectation-maximization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2624 浏览

python - python用协方差最小的高斯混合模型(GMM)拟合加权数据

我想使用 python 将高斯混合模型拟合到一组加权数据点。

我尝试了 sklearn.mixture.GMM() ,它工作得很好,除了它对所有数据点的权重相同。有谁知道在这种方法中为数据点分配权重的方法?我多次尝试使用数据点来“增加它们的权重”,但这对于大型数据集似乎无效。

我也想过自己实现 EM 算法,但这似乎比上面的 GMM 方法慢得多,并且会极大地增加大型数据集的计算时间。

我刚刚发现了 EM 算法 cv2.EM() 的 opencv 方法。这又可以正常工作,但与 sklearn.mixture.GMM 存在相同的问题,此外,似乎无法更改协方差允许的最小值。或者有没有办法将协方差最小值更改为例如 0.001?我希望可以使用probe参数为数据分配权重,但这似乎只是一个输出参数,对拟合过程没有影响,不是吗?使用 probs0 并通过使用 trainM 以 M 步骤启动算法也无济于事。对于 probs0,我使用了(数据点数量)x(GMM 组件数量)矩阵,其列相同,而数据点的加权参数被写入与数据点对应的行。这也没有解决问题。

有谁知道如何操作上述方法,或者是否有人知道另一种方法,以便 GMM 可以拟合加权数据?

0 投票
1 回答
402 浏览

java - EM Clustering with weka 对于某些集群的对数可能性为 0?令人困惑的输出

我使用 EM clusterer 对 43574 个时间序列进行了聚类。输出是 24 个集群。我在这里有一些问题。首先,处理 24 个集群实际上有用吗?是不是太多了?如果我将结果传递给神经外科医生,为了管理患者而标记这些集群,这会起作用吗?我最重要的问题是,如下所示,几个集群的可能性为 0%?!这意味着什么?那为什么它们在不同的集群中?任何帮助将不胜感激,这就是我得到的:

0 1892 ( 4%) 1 5153 ( 12%) 2 1594 ( 4%) 3 1221 ( 3%) 4 122 ( 0%) 5 2714 ( 6%) 6 7092 ( 16%) 7 141 ( 0%) 8 166 ( 0%) 9 464 ( 1%) 10 3331 ( 8%) 11 4316 ( 10%) 14 2411 ( 6%) 15 2573 ( 6%) 17 3063 ( 7%) 18 142 ( 0%) 19 4211 ( 10 %) 20 925 ( 2%) 21 2038 ( 5%) 22 5 ( 0%)

0 投票
1 回答
222 浏览

spss - 如何在 SPSS 中使用期望最大化算法创建初始值估计?

我想使用 EM 算法在 spss 中创建初始值。

我在spss中使用了缺失值分析,还选择了EM,并且我选择了500次作为最大迭代次数,但是在运行spss之后我只得到一组数据!但我也得到了 EM 均值和协方差。

我的问题是如何使用这些数字来创建能够运行插补模型的初始值?

0 投票
1 回答
218 浏览

matlab - 期望最大化算法matlab内存不足错误

我正在 matlab 中实现期望最大化算法。算法在 214096 x 2 数据矩阵上运行,并且在计算概率时,存在 (214096 x 2) * (2 x 2) * (2 x 214096) 矩阵的乘法,这导致 matlab 中内存不足的错误。有没有办法解决这个问题?

方程

Matlab代码:

0 投票
0 回答
578 浏览

text - WEKA 中的模糊聚类

我正在尝试使用 WEKA(GUI 和 java 代码)执行模糊聚类。在我的数据集中,我有两个字段:id 和字符串,所以我想通过这些字符串进行聚类,并作为每个字符串的输出获取属于每个集群的概率的数组。

我编写了定义具有所有必需属性的过滤器的代码(与 WEKA GUI 中的相同),然后使用 EM 进行聚类,然后使用 clusterer.distributionForInstance(filteredData...) 打印出分布。它运行甚至打印输出,问题是对于每个条目,它为其中一个集群分配 1,而对于其他集群,它分配 0。您能帮忙告诉我可能是什么问题吗?

我附上了我的代码片段以获得进一步的建议:

如果不需要 tiidf 变换,该过程运行良好。如果用分类代替聚类(显然必须添加类属性),它也可以完美地工作。

0 投票
1 回答
241 浏览

r - 来自 R 博客网页的 EM 算法中的 R 代码错误

我参考了这个页面的 EM 代码: http ://www.r-bloggers.com/imputing-missing-data-with-expectation-maximization/

最初,当我运行代码时raw < - replicate(10, rpois(50,100)),我收到了这个错误:

然后我将该随机数据更改为raw<-faithful$waiting. 但随后,我收到另一个错误:

这里有人熟悉这段代码以及如何解决这些错误吗?

0 投票
1 回答
1844 浏览

python-3.x - 期望最大化算法(高斯混合模型):ValueError:输入矩阵必须是半正定的

我正在尝试在数据集 data=[[x,y],...] 上实现期望最大化算法(高斯混合模型)。我正在使用mv_norm.pdf(data, mean,cov)函数来计算集群责任。但是在 6-7 次迭代后计算新的协方差值(cov 矩阵)后,cov 矩阵变得奇异,即 cov 的行列式为 0(非常小的值),因此它给出了错误

ValueError:输入矩阵必须是半正定的

raise np.linalg.LinAlgError('奇异矩阵')

有人可以为此提出任何解决方案吗?

最初,我为每个聚类协方差传递了 [[3,0],[0,3]],因为预期的聚类数为 3。

0 投票
0 回答
118 浏览

missing-data - 使用 EM 算法的单变量正态插补

我需要一些关于如何使用 EM 算法填充缺失数据的示例。数据,作为股票价格的每日相对变化,假设为正态分布和单变量样本。我已经进行了一些文献搜索,但几乎没有找到任何关于此的示例。似乎当人们谈论 EM 算法在缺失数据插补中的应用时,他们通常会给出多变量案例的例子。这些是我从大多数论文/讲义中看到的案例。

现在我想知道人们是否使用 EM 算法填充单变量样本的缺失数据,以及在这种情况下 EM 算法插补是否等同于均值插补。如果您能分享一些见解或提供有关此主题的任何参考链接,我将不胜感激。

0 投票
0 回答
141 浏览

java - 为期望最大化算法编码记录样本

首先,我是一个没有数据科学背景的程序员,所以我的统计工作知识非常有限。

我正在创建一个实体匹配工具来匹配跨内部数据集的记录。我想使用这些文档中描述的概率匹配技术*。我对该技术的工作原理以及如何应用它有很好的理解,除了使用期望最大化 (EM) 推导一致/不一致权重。

具体来说,我不清楚如何将我的记录对编码double[][]

我可用的 EM 实现是 Apache Common Math MultivariateNormalMixtureExpectationMaximization

这是一个具体的例子:匹配公司记录。

一家公司有两个字段:name (string)country (enum),我想使用 EM 生成 m 和 u 概率权重。如何double[][]为每个字段创建数据集以输入 EM?

在的情况下name,它是一个字符串,所以会有一个近似的一致/不一致,使用一些字符串相似度方法(编辑距离,语音索引等,细节在这里不相关)

在 的情况下country,我的数据被规范化,因此协议只会在完全匹配时出现。然而,某些国家的代表人数过多和过少。因此,代表人数不足的国家/地区的记录应该比代表人数过多的国家/地区的记录具有更高的权重。

  1. double[]内部均值/代表的值究竟是什么?
  2. 应该有多少条目/列?
  3. 如何将记录编码到double[]?

* 描述使用 EM 的概率匹配技术的文档

0 投票
1 回答
539 浏览

k-means - K-means 作为广义 EM 算法的特例

我正在使用数据集使用 EM 和 K-means 制作 2 个集群。我已经分别实现了 K-means 和 EM 算法。现在我试图从我的 EM 算法实现中推导出 k-means 来进行聚类。我有2个问题。

  1. K-means 被视为广义 EM 算法的一个特例。但是我们需要做出哪些假设才能从 EM 算法中推导出 k-means 呢?

  2. 此外,从编码的角度来看,我们需要在 EM 算法的实现中进行哪些更改,以使其开始表现得与 k-means 算法完全一样?我假设我们需要在两个集群之间共享相同的协方差矩阵。这是正确的假设吗?

这就是我使用 k-means 得到的结果。

聚类 K 均值

这是使用 EM 进行聚类。

聚类 EM