r - 比较期望最大化的时间性能的框架

标签 r performance machine-learning data-mining expectation-maximization

我有自己的基于 this paper的期望最大化(EM)算法的实现,我想将其与另一个实现的性能进行比较。对于测试,我使用 k 质心和 1 Gb 的 txt 数据,我只是测量在 1 次迭代中计算新质心所需的时间。我用 R 中的 EM 实现尝试过,但我不能,因为结果绘制在图表中,并且当存在大量 txt 数据时会卡住。我正在遵循 here 中的示例

有人知道 EM 的实现可以衡量其性能或知道如何使用 R 来实现吗?

最佳答案

公平新兴市场的基准测试很困难。非常难。

  1. 初始化通常会随机,并且可能会有很大不同。据我所知,R 实现默认使用分层聚类来查找初始聚类。它需要 O(n^2) 内存,并且最有可能以 O(n^3) 运行时间成本。在我的基准测试中,R 将因此耗尽内存。我假设有一种方法可以指定初始聚类中心/模型。随机对象初始化当然会快得多。也许 k-means++ 是实践中选择初始中心的好方法。

  2. EM 理论上永远不会终止。它只是在某个时刻不再发生太大变化,因此您可以设置一个阈值来停止。但是,停止阈值的确切定义各不相同

  3. 存在各种型号变体。仅使用模糊分配(例如 Fuzzy-c-means)的方法当然比使用带有协方差矩阵的多元高斯混合模型的实现要快得多。特别是具有更高的维度。 协方差矩阵也需要 O(k * d^2) 内存,而求逆将花费 O(k * d^3) 时间,因此显然不适合文本数据。

  4. 数据可能合适,也可能不合适。如果您在实际具有高斯聚类的数据集上运行 EM,它通常会比在根本不提供良好拟合的数据集上运行得更好。当没有很好的配合时,即使使用相同的实现,您也会看到运行时的很大差异。

对于初学者,请尝试使用不同的初始化多次运行您自己的算法,并检查运行时的差异。与总运行时间相比,方差有多大?

您可以尝试针对 ELKI 中的 EM 实现进行基准测试。但我怀疑该实现是否适用于文本等稀疏数据——该数据不是高斯分布的,不适合进行基准测试。因此,它很可能根本无法处理数据。这是预料之中的,并且可以从理论上解释。尝试找到密集并且可以预期具有多个高斯簇的数据集(抱歉,我不能在这里给你很多建议。经典的 Iris 和 Old Faithful 数据集太小了,无法对于基准测试很有用。

关于r - 比较期望最大化的时间性能的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24757989/

相关文章:

machine-learning - 补丁/内核的大小如何影响卷积网络的结果?

math - 回归公式中矩阵维数不匹配

r - 使用 S3 为 "+"方法模拟多次调度 - 可能吗?

r - 以编程方式查找喷发次数最多的子区间

r - data.table 用子字符串替换列

r - 错误 : Discrete value supplied to continuous scale

mysql - 有效地选择相关表中存在行的行

python - time.time 与 timeit.timeit

sql - 完整性检查 : count(*) vs count(pkColumn)

python - Tensorflow - 仅模型预测 6 个类别中的 2 个类别