1

사람들 위키 데이터에서 tfidf를 사용하여 가장 가까운 이웃을 찾기 위해 scikit-learn NearestNeighbors를 사용하고 있습니다. 내 .kneighbors() 메서드 호출에서scikit-learn NearestNeighbors tfidf의 .kneighbors()는 ValueError를 제공합니다 : UPDATEIFCOPY 기본은 읽기 전용입니다.

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

Multiprocessing 모듈의 예외가 던져 : 나는 나의 전체 코드 및 샘플 데이터를 (크기 80 MB) 업로드 한

ValueError: UPDATEIFCOPY base is read-only 

을 내 참조 용으로 github location here. 그것은 S/O 전기 한도를 초과하는 I 전체 멀티 예외를 붙여 넣을 수

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

: 여기

오류 목록의 일부이다.

무엇이 여기에 있습니까?

+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