【问题标题】:Results of Kernal PCA and LLE are different for different number of CPU cores provided for the run内核 PCA 和 LLE 的结果对于为运行提供的不同 CPU 内核数量是不同的
【发布时间】:2021-09-26 23:18:30
【问题描述】:

我正在使用 Scikit-Learns 的 KPCA 和有时 LLE API 进行降维。 我的数据集的形状约为(700X150),全部为数字。 我只是试图将这些数据传递给上述 API 之一以减少其功能,我已经为它编写了一个简单的 python 脚本(比如 run.py),我可以从终端运行它,它也可以在减少后保存数据。 我面临的问题是,我在 linux 终端中使用“taskset”命令为特定运行分配一定数量的 CPU。我可以在我的机器上提供任意数量的 CPU,例如,终端命令可以是: taskset -c 1-3 python run.py 当我想给 3 个核心时 或 taskset -c 1-2 python run.py 当我只想使用 2 个内核时。 或者当我不想指定任何 CPU 时只需 python run.py

问题是我在这三种情况下得到不同的结果,不同的结果是指三个运行的输出数据彼此不同,这不应该发生,因为我使用脚本,相同的输入数据,并且相同对于所有三个运行的算法(KPCA 或 LLE),我还将“n_jobs”参数保持为 2,因为在使用任务集时我至少使用了 2 个 CPU。我还提供了一个随机状态。幸运的是,所有这 3 个结果都是完全可重现的,这意味着第一个命令(具有 3 个核心)将在每次运行时产生相同的输出数据,类似地,如果运行多次,第二个和第三个命令在各自的运行中也会产生相同的结果。 但是问题为什么这些输出彼此不同? 在我的运行中设置任务集对我来说很重要,因为我使用的是多核机器,我需要为不同的任务安排不同的 CPU,有时我有 2 个,有时我有 3 个,有时我有 n 个 CPU 用于同一任务我相应地给了它们,但我不希望结果根据我给的 CPU 数量而有所不同,这也影响了我的分类性能,这也在管道的后面。 另外,做了一些实验,当我使用 Isomap 减少数据时,我没有看到这种行为。无论我给多少 CPU,结果都是一样的。 我还使用“numactl”命令代替“taskset”,但行为相同。

令人惊讶的是,在 R 语言中使用 kpca 函数时,我们也可以看到同样的行为!当我使用 R 做同样的事情时。关于我所缺少的 KPCA,这里有什么共同点和基本点吗?

请帮忙。 谢谢, 普拉奈

【问题讨论】:

    标签: scikit-learn multiprocessing pca dimensionality-reduction


    【解决方案1】:

    准确了解结果的不同之处可能会很有趣。像 LLE、PCA 和 k-PCA 这样的算法,其矩阵分解具有符号模糊性(例如,在 PCA 中,您可以否定分量向量并否定系数并获得“相同”的答案)。我并不确切地知道该矩阵分解使用什么方法,随机化在其中扮演什么角色,以及它在并行化时如何变化,但是当计算被拆分时它可能会有所不同,这并不让我感到惊讶更多处理器,即使使用相同的随机种子。

    TL;DR:如果结果不同只是因为某些坐标被否定了,那就不足为奇了。如果他们比这更不同,那么我没有一个好的答案。

    【讨论】:

      猜你喜欢
      • 2013-08-09
      • 2021-09-21
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      相关资源
      最近更新 更多