1

人々のwikiデータにtfidfを使用して、最近隣を見つけるためにscikit-learn NearestNeighborsを使用しています。私は私で(サイズは80メガバイトを)私の完全なコードとサンプルデータをアップロードしたscikit-learn NearestNeighbors tfidfの.kneighbors()はValueErrorを返します:UPDATEIFCOPYの基数は読み取り専用です

ValueError: UPDATEIFCOPY base is read-only 

.kneighbors()メソッド呼び出し

res = neigh.kneighbors(obama_tfidf, return_distance=False) 

Multiprocessingモジュールは例外を投げました参照のためgithub location here。ここで

は、エラーリストの一部です:

--------------------------------------------------------------------------- 
JoblibValueError       Traceback (most recent call last) 
<ipython-input-12-dbcbed49b042> in <module>() 
     1 obama_word_counts = count_vectorizer.transform(['obama']) 
     2 obama_tfidf = tfidf_transformer.transform(obama_word_counts) 
----> 3 res = neigh.kneighbors(obama_tfidf, return_distance=False) 
     4 print res 

/usr/local/lib/python2.7/dist-packages/sklearn/neighbors/base.pyc in kneighbors(self, X, n_neighbors, return_distance) 
    355    if self.effective_metric_ == 'euclidean': 
    356     dist = pairwise_distances(X, self._fit_X, 'euclidean', 
--> 357           n_jobs=n_jobs, squared=True) 
    358    else: 
    359     dist = pairwise_distances(

/usr/local/lib/python2.7/dist-packages/sklearn/metrics/pairwise.pyc in pairwise_distances(X, Y, metric, n_jobs, **kwds) 
    1245   func = partial(distance.cdist, metric=metric, **kwds) 
    1246 
-> 1247  return _parallel_pairwise(X, Y, func, n_jobs, **kwds) 
    1248 
    1249 

/usr/local/lib/python2.7/dist-packages/sklearn/metrics/pairwise.pyc in _parallel_pairwise(X, Y, func, n_jobs, **kwds) 
    1094  ret = Parallel(n_jobs=n_jobs, verbose=0)(
    1095   fd(X, Y[s], **kwds) 
-> 1096   for s in gen_even_slices(Y.shape[0], n_jobs)) 
    1097 
    1098  return np.hstack(ret) 

/usr/local/lib/python2.7/dist-packages/sklearn/externals/joblib/parallel.pyc in __call__(self, iterable) 
    787     # consumption. 
    788     self._iterating = False 
--> 789    self.retrieve() 
    790    # Make sure that we get a last message telling us we are done 
    791    elapsed_time = time.time() - self._start_time 

/usr/local/lib/python2.7/dist-packages/sklearn/externals/joblib/parallel.pyc in retrieve(self) 
    738      exception = exception_type(report) 
    739 
--> 740      raise exception 
    741 
    742  def __call__(self, iterable): 

JoblibValueError: JoblibValueError 

それはS/O投稿制限を超えるように私は、全体のマルチプロセッシング例外を貼り付けることはできません。

私はここで何が欠けていますか?

+1

n_jobs = 1(-1ではなく)を設定して無効にしてみましたが、正常に機能しました... –

答えて

0

n_jobsが-1の場合、refで説明したように、ジョブ数はCPUコアの数に設定されます。

sklearn NN関数が_parallel_pairwise()を呼び出すと、エラーが発生し、スライスまで取得しようとします。

n_jobsを偶数に設定してください。当然、CPUコアの数よりも少なくなります。


すでに述べたように、あなたは、このようにエラーを露出させない、コードを並列化しない1に等しいn_jobs、でこれを実行することができます。

+0

偶数スライスを取得しようとしているときに、* _parallel_pairwise()*の既知のバグですか?もしそうなら、その修正に関する考え方は?回避策については、n_jobsは#coresより* less *少ない* equal *でなくてはなりませんか? –

+0

わかりません、申し訳ありません。 – gsamaras

関連する問題