2013-10-11 2 views
0

내 sklearn 버전입니다 리눅스 데비안 GNU/리눅스 7.1병렬 랜덤 포리스트 A 예외를 발생 scikit는 배우기

호출에 파이썬 2.7와 0.14.1 : 호출

clf = RandomForestClassifier(min_samples_split = 10, n_estimators = 50 , n_jobs = 1) is ok 

동안 :

clf = RandomForestClassifier(min_samples_split = 10, n_estimators = 50 , n_jobs = 5) 
clf.fit(train.toarray(), targets) 

Traceback (most recent call last): 
File "/usr/lib/python2.7/threading.py", line 552, in bootstrap_inner 
self.run() 
File "/usr/lib/python2.7/threading.py", line 505, in run 
self.target(self.__args, *self.__kwargs) 
File "/usr/lib/python2.7/multiprocessing/pool.py", line 342, in handletasks 
put(task) 
SystemError: NULL result without error in PyObject_Call 
,691 :

다음과 같은 예외가 던져

예외가 발생하면 임의의 포리스트의 모든 프로세스가 모두 차단됩니다.

+0

모양과 데이터의 DTYPE은 무엇입니까? – ogrisel

+0

실제로 입력 데이터는 게시물과 동일한 형식입니다 (http : //stackoverflow.com/questions/19265097/why-does-cross-validation-for-randomforestregressor-fail-in-scikit-learn). dtype은 float입니다. – mike

+0

하지만 'load_data'는 해당 게시물에 설명되어 있지 않으므로 결과 모양을 알 수있는 방법이 없습니다. 'print (train.shape)'를 호출하고 그 결과를 설명에 포함하십시오. – ogrisel

답변

2

셰이프 정보를 기반으로 데이터 집합은 ~ 4GB (단 정밀도 부동 소수점) 여야합니다. 이 예외는 다중 처리가 데이터를 직렬화하여 작업자 프로세스로 전달하는 동안 메모리 부족으로 인해 발생할 수 있습니다. https://github.com/joblib/joblib

개발 버전 :

메모리 복사본의 수를 제한하려면 심볼릭 링크 또는 JOBLIB의 REPO의 마스터 브랜치의 joblib 하위 폴더를 복사하여 sklearn/externals/joblib 폴더를 대체하기 위해 시도 할 수 있습니다 of joblib가 대형 입력 배열에 대한 메모리 매핑을 사용하도록 향상되었습니다. 이렇게하면 문제가 해결 될 수 있습니다.

편집 메모리 맵핑 지원 JOBLIB에 착륙했습니다 0.8 이상과에 기본적으로 포함되어 scikit 배우기 0.15+

+0

입니다. 나는 새로운 joblib 버전을 시도 할 것이다. 멀티 머신에서 데이터를 분할하고 scikit-learn의 임의의 포리스트를 실행하는 방법이 있습니까? 모든 라이브러리가 지원됩니까? – mike

+0

예를 들어 IPython.parallel에서는 가능하지만 준비된 라이브러리가없고 결합 하위 모델도 클래스 별 모델입니다. 그것에 대해 https://github.com/ogrisel/parallel_ml_tutorial 및 http://vimeo.com/63269736에 대해 이야기합니다. – ogrisel

관련 문제