私のマシンで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.もしないどちらも
そのように機能していないことをどのように知っていますか? –
これは簡単です:スレッドが1つしか実行されていないことがわかります。そして、データの次元を増やすほど多項式時間がかかります。 (ポイント数ではない) – asdf
あなたが試したことの詳細を教えてもらえますか?あなたはPythonを使用しますか?バージョン ? joblib.Parallel?あなたが試した基本的な実装のように、あなたのコードを表示できますか? – Gabriel