1

Ich benutze scikit-learn NearestNeighbors, um den nächsten Nachbarn zu finden, mit tfidf auf Leute wiki Daten.scikit-learn NearestNeighbors .kneighbors() auf tfidf gibt ValueError: UPDATEIFCOPY base ist schreibgeschützt

In meinem .kneighbors() Methodenaufruf

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

ein Multiprocessing Modul hat eine Ausnahme von:

ValueError: UPDATEIFCOPY base is read-only 

ich meinen kompletten Code und Beispieldaten hochgeladen habe (80 MB groß) an meinem github location here als Referenz.

Hier ist ein Teil der Fehlerliste:

--------------------------------------------------------------------------- 
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 

ich nicht die gesamte Multi Ausnahme einfügen kann, wie es die S/A-Posting Grenze überschreitet.

Was fehlt mir hier?

+1

Da es eine Multiprocessing-Ausnahme war, habe ich versucht, es durch Einstellung von n_jobs = 1 (statt -1) zu deaktivieren, und es hat gut funktioniert ... –

Antwort

0

Wenn n_jobs gleich -1 ist, wird die Anzahl der Jobs auf die Anzahl der CPU-Kerne festgelegt, wie in der ref erwähnt.

Der Fehler tritt auf, wenn die slearn NN-Funktion _parallel_pairwise() aufruft, die dann versucht, sogar Slices zu erhalten.

Versuchen Sie die Einstellung n_jobs auf eine gerade Zahl, die natürlich weniger als die Anzahl der CPU-Kerne ist.


Wie Sie bereits erwähnt, können Sie dies mit n_jobs gleich 1 laufen, die den Code nicht parallelisieren, also nicht den Fehler auszusetzen.

+0

ist es ein bekannter Fehler in * _parallel_pairwise() * beim Versuch, gleichmäßige Scheiben zu bekommen? Wenn ja, irgendeine Idee über seine Lösung? Für die Arbeit müssen die n_jobs * weniger * sein als #cores und nicht * gleich *? –

+0

Ich bin mir nicht sicher, sorry. – gsamaras

Verwandte Themen