问题标签 [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 投票
1 回答
62 浏览

r - 多参数下如何向量化似然计算?

我正在尝试实现伯努利混合,并且想知道如何在不循环的情况下正确地对计算进行矢量化。

我尝试了各种版本的应用,但无法获得所需的输出(dim = c(5,4,2)。我的组件参数应该在列表中而不是矩阵中吗?

0 投票
1 回答
197 浏览

python - 在高斯混合模型/期望最大化模型中包括时间依赖性?

我正在处理时间序列数据集,因此在拟合包中的GaussianMixture()函数时scikit-learn,我需要使每个特征(时间戳)依赖。但是,在查看源代码后,我没有找到自定义协方差矩阵的参数。

凭借我有限的统计知识,我很好奇如何在 E 步期间修改协方差矩阵以将时间依赖性纳入 GMM 模型。非常感谢。

这是源代码:我要进行的更改是在 estimate_gaussian_parameters() 函数中 https://github.com/scikit-learn/scikit-learn/blob/7389dba/sklearn/mixture/gaussian_mixture.py#L435

0 投票
1 回答
66 浏览

perl - Perl 期望最大化 DNA 序列的对数赔率分数

我对这段代码的总体目标是在每个 DNA 序列中找到基序(较小的序列),该序列将根据对数赔率评分矩阵报告最大对数赔率得分。我正在搜索的 .txt 文件如下所示:

.... 等等。

我目前正在研究我的代码的最大化步骤,并且我正在努力计算我的 DNA 序列中一个基序的对数几率得分。我有创建对数赔率评分矩阵的代码 - 请参见以下内容:

现在,我需要计算每个 DNA 序列中基序的对数优势得分。然后,我将遍历序列中所有可能的位置,并找到每个序列的最大分数。未来的工作需要我用最高分数回忆主题,但我还没有尝试过(只是想为这些最高分数提供范围)。

策略:我将创建一个对数赔率分数和最大分数的哈希,以保持每个序列的最大分数作为迭代。为了计算对数赔率分数,我将查看对数赔率评分矩阵的哪个元素与主题中的元素匹配。

当我从代码中取消注释最大化步骤并运行它时,最大化部分不会打印任何内容。我没有收到任何错误,但没有新的打印。我知道我的期望步骤可以简化(我会在它工作后清理所有内容),但我首先专注于这个最大化步骤。我知道最大化代码中有很多缺陷,尤其是在尝试创建对数赔率分数和最大分数哈希值时。任何和所有输入都有帮助!提前感谢您的耐心和建议。如果您需要任何澄清,请告诉我。

0 投票
1 回答
74 浏览

numpy - 使用 scipy 库的有界优化

让我们假设一个对数似然函数f(x, y, z) = prob(k0)* log((1-x)^(1-y)) + prob(k1)*log((1-x)^(1-z))并且存在约束,使得 x、y 和 z 的可能值应位于 0 和 1 之间。目标是最小化函数并返回该最小值处的 x、y 和 z 值。

我尝试使用共轭梯度法 scipy 库。

该方法在第一次迭代中失败。

由于有两个以上的变量,我是否需要提供 Hessian 矩阵?

我也尝试过 Nelder-mead 方法,但它需要很多时间。

此外,更重要的是,该方法不考虑变量的界限,并在某些情况下返回未在界限内的 x、y 和 z 的值。我

在 scipy 或任何其他考虑这种类型的有界优化的包中还有其他方法。请帮忙。

0 投票
0 回答
647 浏览

python - 使用 Levenshtein 距离使用 Kmeans/EM 对字符串(文本)进行聚类

我正在尝试使用 Kmeans/EM 对字符串进行聚类。我有一个字符串列表(大约 70 个字符串),我想使用 Levenshtein 相似度度量对它们进行聚类。

所以基本上,我正在尝试在这篇研究论文中实现聚类部分:https ://ieeexplore.ieee.org/document/7765062/ 进行预处理之后。我能够使用 Levenshtein 距离制定相似度矩阵,然后使用层次聚类和光谱聚类对字符串进行聚类,但我无法使用 Kmeans 或 EM 来实现。这是因为在我能够实现的之前的算法中,只有相似度/距离矩阵足以进行聚类。但是在 K-means 和 EM 的情况下,我需要以某种方式以数学上可操作的形式表示文本,因为我们必须找到它们的均值(在 K-means 的情况下)。

我能够找到一些技术来将文本转换为向量,例如:1)词袋 2)TF-IDF 3)doc2vec 或 word2vec

我是否应该使用上述任何方法将每个字符串转换为向量,然后应用 Kmeans?是否有必要将字符串转换为向量才能应用 K-means 或 EM?最后,我必须在 Python 中实现所有内容,因此,使用 Sklearn 中的 Kmeans 不允许我给出我选择的度量或相似度矩阵。我应该怎么办?

注意:我在他们使用 TF-IDF 转换文本的文本上找到了 K-means 的实现。然后应用 Kmeans (euclidian) 但我想使用 Levenshtein。

另请注意:我有一个字符串列表,而不是文本文档,每个字符串大约 20-30 个单词

0 投票
3 回答
1119 浏览

machine-learning - 提供的模型不是 YellowBrick 中的聚类估计器

我正在尝试使用 YellowBrick 的 KElbowVisualizer 和 SKLearn 的期望最大化算法类:GaussianMixture 为我的数据可视化肘部图。

当我运行它时,我得到标题中的错误。(我也尝试过 ClassificationReport,但也失败了)

我在 YellowBrick 中找不到任何东西来帮助我估计期望最大化的组件数量。

0 投票
0 回答
173 浏览

k-means - 使用 Kmeans 初始化 EM-Algorithm

我最近阅读了关于期望最大化 (EM) 的文章,并且不断出现使用 K-Means 初始化 EM 是一个好主意,但我在掌握这个概念时遇到了困难。

据我所知,在使用 kmeans 时,您得到的结果是根据预定义的集群数量的集群质心坐标,那么如何使用它来初始化 EM。为了让事情更清楚,这是我目前正在尝试解决的问题:

我有一个噪声数据点 Y 的数据集,它来自从 8-ASK 集合中提取的样本 X。现在我加载了我的数据集并使用了 kmeans 算法来识别质心,但似乎不知道下一步是什么。我使用的 EM 算法需要参数:质心的初始起始值及其概率分布以及初始均值和方差,但我不明白如何准确获得这些值。

总结一下我的问题基本上是当我在我的数据 Y 上运行他时,我如何计算 kmeans 算法生成的质心的均值、方差和初始分布?

0 投票
1 回答
245 浏览

java - 将 Mat 转换为 EM 的一维浮点数组?

我正在尝试将 Python 代码转换为 Java。但是,我无法找到一种方法来创建样本来训练期望最大化,因为它应该是一个具有 2 个值(来自 HSV 颜色空间的 S 和 V)的单通道矩阵,如下所示:

  • 第 0 行:S、V
  • 第 1 行:S、V
  • 第 2 行:S、V
  • 第 3 行:S、V

在 Python 中,我能够做到以下几点:

我尝试了以下但没有成功,因为结果不是 aMat并且我找不到将其转换回来的方法。

有人可以帮我改造垫子吗?

0 投票
0 回答
1165 浏览

python - MNIST图像数据上的EM算法python

我需要实现 EM 算法以在图像数据(像素)上拟合 GMM。数据以 .mat 文件的形式提供。数据类似于 MNIST 数据集。所以它是一个形状为 784 x 1990 的图像矩阵。有 1990 张图像,矩阵的每一列对应一个大小为 28 x 28 像素的图像(所以 28*28 = 784)。

我在 python 中看到了很多关于 EM 的在线示例,但没有一个用于处理图像。大多数生成如下数据。我应该如何处理这些像素图像向量?我不确定如何重塑它或如何开始这项任务。我是否平均每列的像素?我的目标 X 应该是一个列表还是列表列表?以我的拙见,我认为我需要获取每个黑白图像的 x,y 坐标。

或者像这样,有一个 X 和 Y 来生成散点图:

0 投票
0 回答
90 浏览

python - 高斯混合模型的代码是否正确?

我正在学习 GMM 进行颜色分割。我在网上找到了一个很好的资源,其中包含以下 GMM 代码:

现在我的理解是,在 EM 的最大化步骤中,我们必须更新高斯参数(协方差矩阵、高斯的均值和大小(pi_c))在上面给出的代码中,我可以看到 pi_c 和均值(mu)的值正在更新,但我认为协方差矩阵的值没有更新。但是,当我运行代码时,它似乎正在工作(?)。有人可以帮我确定代码是否正确。代码来自以下资源