【问题标题】:how to construct training vectors of word n-gram using TF-IDF如何使用 TF-IDF 构建单词 n-gram 的训练向量
【发布时间】:2014-12-14 13:11:48
【问题描述】:

我的任务是使用 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())

training部分可以做,但是程序跑到predict部分的时候就说

 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)

训练方法和预测方法是一样的。我该如何解决这个对齐问题?谁能帮我检查上面的代码或给我一些想法?

【问题讨论】:

    标签: python nlp svm tf-idf


    【解决方案1】:

    我认为问题在于附加,请尝试以下操作:

    ...
    X = tfidf.transform(freq_term_vector)
    ...
    X_test = tfidf.transform(freq_term_vector_test)
    clf.predict(X_test)
    

    【讨论】:

    • 我明白了,问题实际上出在 append 方法上。我尝试了extend方法,效果很好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2019-01-10
    • 1970-01-01
    • 2018-03-16
    • 2019-07-17
    • 2020-09-22
    • 1970-01-01
    相关资源
    最近更新 更多