与多处理、joblib 或多进程的并行化不起作用

Parallelization with multiprocessing, joblib or multiprocess is not working

这个 Whosebug post 很好地展示了一种计算 RandomForestClassifier().

的邻近矩阵的方法

Proximity Matrix in sklearn.ensemble.RandomForestClassifier

然而,如果您有一个大数据框,该脚本中的 for 循环会非常慢。我试图并行化这个 for 循环,但没有成功。我只得到 'None' 作为输出。

如何在 Spyder 4 运行 [=24= 中并行化这个 for 循环]Python 3.8.5Windows 10?

proxMat = 1*np.equal.outer(a, a)

for i in range(1, nTrees):
      a = terminals[:,i]
      proxMat += 1*np.equal.outer(a, a)

这里你想执行一个reduce操作——所以并行化不是很明显。 您没有指定如何尝试并行化循环。 并行化的简单方法:

import multiprocessing
pool = multiprocessing.Pool(processes=4)

def get_outer(i):
   return np.equal.outer(terminals[:,i],terminals[:,i])

todo = list(range(1, nTrees))
results = pool.map(get_outer, todo)
proxMat = 1*np.equal.outer(a, a)
for res in results:
    proxMat+ = res

我不确定这个是否有帮助,但可能你会遇到更少的酸洗问题:

import multiprocessing
pool = multiprocessing.Pool(processes=4)

def get_outer(t):
   return np.equal.outer(t,t)

# This part might be costly !
terms = [terminals[:,i] for i in range(1, nTrees)]

results = pool.map(get_outer, terms)
proxMat = 1*np.equal.outer(a, a)
for res in results:
    proxMat+ = res