使用joblib

时间:2019-04-30 11:39:04

标签: python-3.x knn joblib

在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一样有效?

0 个答案:

没有答案