在NearestNeighbours类的描述中写为:
n_jobs:int或无,可选(默认=无) 为邻居搜索运行的并行作业数。 除非在:obj:
None
上下文中,否则joblib.parallel_backend
表示1。-1
表示使用所有处理器。参见:term:Glossary <n_jobs>
有关更多详细信息。
如果我们检查一下[sklearn] TSNE的_fit函数主体,则有以下字符串(746-761):
if self.verbose:
print("[t-SNE] Computing {} nearest neighbors...".format(k))
# Find the nearest neighbors for every point
knn = NearestNeighbors(algorithm='auto', n_neighbors=k,
metric=self.metric) # here we may place n_jobs=-1 and its will improve speed of the knn.kneighbours call
t0 = time()
knn.fit(X)
duration = time() - t0
if self.verbose:
print("[t-SNE] Indexed {} samples in {:.3f}s...".format(
n_samples, duration))
t0 = time()
distances_nn, neighbors_nn = knn.kneighbors(
None, n_neighbors=k)
因此,我通过将Near_Neighbouts的ctor中添加设置为-1的n_jobs进行检查并获得了性能(速度)的改善,但是我认为这不是正确的方法,因此让我们回到说明中这个班级的 我尝试这样做:
with parallel_backend('loky', -1):
X_embedded = TSNE(n_components=2, n_iter_without_progress=100, learning_rate=100.0, verbose=1,
random_state=123).fit_transform(X)
但是这只能在单个处理器上工作,我也尝试过使用joblib中的'Parallel'实例,但是没有任何性能上的提高(与我在TSNE主体内部欺骗代码的情况相比)。
那么,关于如何使用joblib的任何建议,就好像我将n_jobs = -1手动设置为knn一样有效?