【发布时间】: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