약 400MB의 텍스트 데이터에서 NB 분류기를 실행하려면 vectorizer를 사용해야합니다.Scikit-learn MultinomialNB에서 메모리 부족 오류
vectorizer = TfidfVectorizer(min_df=2)
X_train = vectorizer.fit_transform(X_data)
그러나 메모리 오류가 발생합니다. Linux64는 Python 64 비트 버전을 사용하고 있습니다. 사람들은 어떻게
Traceback (most recent call last):
File "ParseData.py", line 234, in <module>
main()
File "ParseData.py", line 211, in main
classifier = MultinomialNB().fit(X_train, y_train)
File "/home/pratibha/anaconda/lib/python2.7/site-packages/sklearn/naive_bayes.py", line 313, in fit
Y = labelbin.fit_transform(y)
File "/home/pratibha/anaconda/lib/python2.7/site-packages/sklearn/base.py", line 408, in fit_transform
return self.fit(X, **fit_params).transform(X)
File "/home/pratibha/anaconda/lib/python2.7/site-packages/sklearn/preprocessing/label.py", line 272, in transform
neg_label=self.neg_label)
File "/home/pratibha/anaconda/lib/python2.7/site-packages/sklearn/preprocessing/label.py", line 394, in label_binarize
Y = np.zeros((len(y), len(classes)), dtype=np.int)
편집 (ogrisel) 큰 데이터 세트 (텍스트)에 대한 Scikit에서 벡터화 과정을 통해 작동합니까 : I가 "메모리 오류 중 Scikit에서"Scikit 벡터 기에서 메모리 오류 부족 "에서 제목을 변경 -learn MultinomialNB "를 사용하여 실제 문제를보다 잘 설명 할 수 있습니다.
역 추적은 벡터화 단계가 아니라 'MultinomialNB(). fit (X_train, y_train)'을 호출 할 때 y 변수의 레이블 추출과 관련이있는 것처럼 보입니다. 'y_train' 변수에는 무엇이 있습니까? 이 데이터 구조의 모양은 무엇입니까? – ogrisel
안녕하세요 Orgisel, X_train의 원래 모양은 6MX6M이고 y_train은 6Mx43K입니다. 나는 트리밍을 시도하고 400Kx6M이고 ytrain 인 X_train의 서브 세트만을 취했습니다. 400Kx43k – David
y_train은 43,000 개의 가능한 클래스로 6M 데이터 포인트를 분류하는 스파 스 인디케이터 매트릭스 (0 및 1 라벨 있음)라고 말하고 있습니까? 레이블 전처리 코드가 수정 되더라도 MultinomialNB는 밀집한 표현을 사용하고 있으며 그 많은 클래스에 대한 매개 변수를 절대로 저장할 수 없게됩니다. – ogrisel