2017-11-29 12 views
0

약 3000 개의 문서에서 구조화되지 않은 텍스트 데이터를 추출했으며이 데이터를이 문서를 분류하는 데 사용하려고합니다.NLTK : 벡터화 후 기능 감소

그러나 정지 문자 &을 제거하고 데이터를 lemmatize 한 후에도 카운트 벡터화는 64000 개 이상의 피쳐를 생성합니다.

이러한 많은 기능에는 임의의 숫자와 같은 불필요한 토큰이나 다른 언어의 텍스트가 들어 있습니다. 내가 사용하고

라이브러리는 다음과 같습니다

  • 토큰 화 : PUNKT (NLTK)
  • POS 태그 : 펜 Treebank (NLTK)
  • 원형 화 : 워드 넷 (NLTK)
  • 벡터화 : CountVectorizer (sk-learn)

누구든지 내 분류자를 훈련하기 위해 기능의 수를 줄일 수있는 방법을 제안 할 수 있습니까?

+0

카운트 벡터화가 항상 상당한 신체의 모든 종류의 기능의 엄청난 금액을 생성합니다. 이를 제한하기 위해 어휘 목록을 제공해야합니다. 좋은 어휘 목록을 만드는 것은 그 자체로 좋은 문제입니다. – Arne

+0

정확합니다. 이 특별한 문제의 문제점은, 저에게는 그것이 미지의 영역에 있다는 것입니다. 그래서 나는 찾아야 만하는 단어에 대해서 확신조차하지 못한다. – prashantarya

+0

문서를 식별/분류하기 위해 단어를 중요하게 만드는 것을 배우고 싶다면'tf/idf' 알고리즘을 살펴보기 바란다. CountVectorizer가 가중치를 위해 내부적으로 사용하는 것일 수도 있지만, 단어 선택 방법에 대해 잘 알고 있다면 코퍼스에서 가장 중요한 단어의 목록을 만들 수 있어야합니다. 그게 당신 문제를 해결할 수 있을까요? – Arne

답변

1

당신은 보완 할 수 있습니다, 여기에 두 가지 선택이 있습니다.

  1. 변경 강력한 규칙이 당신이에 관심이없는 숫자 또는 다른 토큰을 제거하는 정규식을 사용하여 토큰
  2. 사용 기능 선택은 유지 분류와 관련된 기능의 서브 세트. 여기에 코드의 데모 샘플 데이터의 기능의 50 %를 유지하는 것입니다 :

from sklearn.datasets import load_iris

from sklearn.feature_selection import SelectPercentile 
from sklearn.feature_selection import chi2 
import numpy 
iris = load_iris() 
X, y = iris.data, iris.target 
selector = SelectPercentile(score_func=chi2, percentile=50) 
X_reduced = selector.fit_transform(X, y) 
+1

정규 표현식으로 벡터화 할 때의 토큰 수를 줄일 수 있습니다. 그러나 변수를 더 줄여야 할 경우 SelectPercentile 클래스가 올바른 방법이어야합니다. 의견을 보내 주셔서 감사합니다! 분류 프로그램이 실행되면 업데이트됩니다. – prashantarya