2012-12-06 3 views
2

우선 나는 어제 파이썬으로 시작했습니다. 나는 SciKit과 큰 데이터 세트 (250.000 개의 짹짹)로 텍스트 분류를하려고합니다. 알고리즘의 경우 모든 트윗은 4000 x 1 벡터로 표시되므로 입력이 250.000 개의 행과 4000 개의 열로 구성됩니다. 파이썬으로 이것을 만들려고 할 때 8500 개의 짹짹 (목록으로 작업하고 추가 할 때)이 부족하여 메모리를 미리 할당하면 오류가 발생합니다 : MemoryError (np.zeros (4000,2500000)) . SciKit은 이러한 대규모 데이터 세트로 작업 할 수 없습니까? 뭔가 잘못된 일을하고 있습니까 (파이썬으로 2 일째되는 날)? 기능을 표현하여 내 기억에 맞출 수있는 또 다른 방법이 있습니까?SciKit-learn 및 대용량 데이터 세트로 텍스트 분류

편집 : 나는이 베르누이 NB

EDIT2하려는 : 어쩌면 온라인 학습으로 가능하다? 트윗을 읽고, 모델이 트윗을 사용하고, 메모리에서 제거하고, 다른 것을 읽게하고, 모델을 배우게하십시오 ...하지만 Bernoulli NB가 온라인 학습을 허락한다고 생각하지 않습니다.

답변

3

4000 x 1 벡터는 어휘 표현입니다. 이 경우 250000 x 4000 매트릭스는 각 짹짹이에 매우 적은 단어가 있기 때문에 많은 0을 갖습니다. 이러한 종류의 행렬을 sparse matrices이라고하며,이를 메모리에 효율적으로 저장하는 방법이 있습니다. 시작하려면 스파 스 행렬에 대해서는 Scipy documentationSciKit documentation을 참조하십시오. 링크를 읽은 후에 도움이 더 필요하면 다시 게시하십시오.

+2

사실, scikits.sparse 패키지는이 문제에 무관하고, scikit 배우기 ESP, 사용자로부터 scipy.sparse의 복잡성을 숨기는 꽤 기능이 포함되어 있습니다. 문서 분류의 경우 OP 롤을 제안하는 경우 -1 –

7

scikits '벡터화기를 사용하는 경우 (CountVectorizer 또는 TfidfVectorizer은 처음 시도하는 것이 좋음) 스파 스 매트릭스 표현을 얻습니다. 문서에서 :

vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english') 
X_train = vectorizer.fit_transform(data_train.data) 
#initialize your classifier 
clf.fit(X_train, y_train) 
+1

또한 텍스트 데이터의 희소성 문제를 명시 적으로 처리하는 [텍스트 기능 추출 문서] (http://scikit-learn.org/dev/modules/feature_extraction.html#text-feature-extraction)에 대한 문서를 언급 할 가치가 있습니다. – ogrisel