как построить обучающие векторы словесной n-граммы с помощью TF-IDF

Моя задача состоит в том, чтобы сделать классификацию текста с помощью svm, используя слово n-gram в качестве признаков. Перед использованием TF-IDF мой код:

word_dic = ngram.wordNgrams(text, n)
freq_term_vector = [word_dic[gram] if gram in word_dic else 0 for gram in global_vector]
X.append(freq_term_vector)

И это работает хорошо. Однако, когда я попробовал TF-IDF, код ниже:

freq_term_vector = [word_dic[gram] if gram in word_dic else 0 for gram in global_vector]
tfidf = TfidfTransformer(norm="l2")
tfidf.fit(freq_term_vector)
X.append(tfidf.transform(freq_term_vector).toarray())

Обучающую часть можно выполнить, но когда программа перешла к части прогнозирования, она сказала:

 clf.predict(X_test)
  File "/usr/lib/python2.7/dist-packages/sklearn/linear_model/base.py", line 223, in predict
    scores = self.decision_function(X)
  File "/usr/lib/python2.7/dist-packages/sklearn/linear_model/base.py", line 207, in decision_function
    dense_output=True) + self.intercept_
  File "/usr/lib/python2.7/dist-packages/sklearn/utils/extmath.py", line 83, in safe_sparse_dot
    return np.dot(a, b)
ValueError: shapes (1100,1,38) and (1,11) not aligned: 38 (dim 2) != 1 (dim 0)

Метод обучения и метод прогнозирования одинаковы. Как я могу решить эту проблему выравнивания? Может ли кто-нибудь помочь мне проверить мой код выше или дать мне некоторое представление?


person allenwang    schedule 19.10.2014    source источник


Ответы (1)


Я думаю, что проблема с добавлением, попробуйте следующее:

...
X = tfidf.transform(freq_term_vector)
...
X_test = tfidf.transform(freq_term_vector_test)
clf.predict(X_test)
person D Volsky    schedule 20.10.2014
comment
Я вижу, проблема на самом деле с методом добавления. Я попробовал метод расширения, и он работает хорошо. Спасибо! - person allenwang; 21.10.2014