나는 두 클래스 기계 학습 문제에 종사하고있다. 교육 세트에는 2 백만 개의 URL 행 (문자열)과 레이블 0과 1이 있습니다. 분류 자 LogisticRegression()은 테스트 데이터 집합이 전달 될 때 두 개의 레이블 중 하나를 예측해야합니다. 작은 데이터 세트, 즉 URL이 78,000 개이고 라벨에 0과 1을 사용할 때 95 %의 정확도 결과를 얻고 있습니다.Scikit-Learn Python의 CountVectorizer()는 큰 데이터 세트를 먹일 때 메모리 오류를 발생시킵니다. Smaller 데이터 세트가있는 동일한 코드가 제대로 작동하지만 무엇이 누락 되었습니까?
나는이 오류가받을 큰 데이터 세트 (URL 문자열의 2 백만 행)에 공급하면 내가 데 문제가 : 공정 충분한 정확도가 작은 데이터 세트를 위해 노력하고 있습니다
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "C:/Users/Slim/.xy/startups/start/chi2-94.85 - Copy.py", line 48, in <module>
bi_counts = bi.fit_transform(url_list)
File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line 780, in fit_transform
vocabulary, X = self._count_vocab(raw_documents, self.fixed_vocabulary)
File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line 717, in _count_vocab
j_indices.append(vocabulary[feature])
MemoryError
내 코드를
bi = CountVectorizer(ngram_range=(3, 3),binary = True, max_features=9000, analyzer='char_wb')
bi_counts = bi.fit_transform(url_list)
tf = TfidfTransformer(norm='l2')
X_train_tf =tf.fit_transform(use_idf=True, bi_counts)
clf = LogisticRegression(penalty='l1',intercept_scaling=0.5,random_state=True)
clf.fit(train_x2,y)
나는 가능한 말의 max_features = 100,하지만 여전히 같은 결과로 최소한 'max_features'을 유지하기 위해 노력했다.
참고 : 나는 기가 바이트 램과 코어 i5를 사용하고
- 을 나는 같은 기가 바이트 램에 코드 만 행운
- 내가 sklearn와 Pyhon 2.7.6을 사용하고 시도 , NumPy와 1.8.1, SciPy 0.14.0,하기 matplotlib 1.3.1
UPDATE :
@Andreas Mueller는 HashingVectorizer()를 사용하도록 제안했지만 작고 큰 데이터 세트와 함께 사용하여 78,000 개의 데이터 세트를 성공적으로 컴파일했지만 200 만 개의 데이터 세트가 위에 표시된 것과 동일한 메모리 오류를 발생 시켰습니다. 큰 데이터 세트를 컴파일 할 때 8GB RAM 및 사용 중 메모리 공간 = 30 %에서 시도했습니다.
조금 더 생각하면 약간 이상하게 보입니다. 당신은 3-gram과 함께''char_wb''를 사용하고 있습니다. 그래서 많은 기능이 있어서는 안됩니다. 맞습니까? 더 작은 데이터 세트에 대해 몇 가지 기능을 사용 했습니까? –
3 그램 만 있으면 40968 개의 기능과 54 %의 정확도를 얻게됩니다. char_wb 만 있으면 78,000 개의 URL에서 50 개의 기능 만 가져오고 데이터 세트에는 행당 하나의 URL이 있습니다. char_wb와 3-gram을 적용하면 25,376 개의 특징과 95 %의 정확도를 얻게됩니다. – Nasir
Ok 25k는 char 3-grams에 적합합니다. –