2017-05-30 5 views
-1

私のマシンでscikit-learnを使用しています。私はanaconda implemnetation(マルチスレッドのためにMKLに依存します)とオープンブラスの実装を試しています。KNearestNeighbourがScikit-Learnのマルチスレッドで実行されていません

k-最近傍のクラシファイアの並列バージョンを使用したいと思います。https://github.com/scikit-learn/scikit-learn/pull/4009によれば、sklearnは1年前のバージョン0.17でこの変更をマージする必要があります。

マルチスレッドは、PCAとすべてのnumpy操作に対して正常に動作します。ドットプロダクトとPCAを行うと、スレッドの数が多いためにマルチスレッドが機能していると言えます。私がランチKNNは約10分かかります。 私はMNISTの高次元データセット(画像の数字)を分類しています。だから私は35-50次元のベクトルを得るためにPCAをやっています。そして、私は非線形拡張をしていますので、600-100次元のベクトルを得ています。だからこそ、私は並列性が非常に悪いことが必要です。

sklearnの私のバージョンである:(。。 'scikit学習バージョン{}' でフォーマット(sklearn バージョン))

プリント
scikit学習バージョンは、0.18.1であります。私はのpython3を使用していますし、これはコードのサンプルです

def classify_knn(train, test, train_labels): 
    clf = KNeighborsClassifier(algorithm='ball_tree') 
    clf = clf.fit(train, train_labels) 
    return clf.predict(test) 

私はと「ball_tree」せずに試してみました。誰も2017年のpython 2.7を使用してはならないとI.もしないどちらも

+0

そのように機能していないことをどのように知っていますか? –

+0

これは簡単です:スレッドが1つしか実行されていないことがわかります。そして、データの次元を増やすほど多項式時間がかかります。 (ポイント数ではない) – asdf

+1

あなたが試したことの詳細を教えてもらえますか?あなたはPythonを使用しますか?バージョン ? joblib.Parallel?あなたが試した基本的な実装のように、あなたのコードを表示できますか? – Gabriel

答えて

0

だけパラメータとして渡す

n_jobs = -1

は、問題を解決しました。

+0

ああ、私たちは同時にそれを見つける^ ^解決策がドキュメントに書かれていたので、それが多くの貢献をしているかどうかはわかりませんが、ドキュメントにリンクを追加して、このパラメータの使用をあなたの回答に引用することができます – Gabriel

+0

それは私のせいです。 scigitの他のAPIで起こっているように、私はデフォルトでマルチスレッド動作を想定していたので、私はドキュメントを読んでいませんでした... – asdf

関連する問題