【问题标题】:How to standardize the bag of words for train and test?如何标准化训练和测试的词袋?
【发布时间】:2017-07-08 16:38:21
【问题描述】:

我正在尝试根据 NLP 的词袋模型进行分类。

  1. 是否使用 NLTK 对火车数据进行了预处理(标点符号、停用词删除、小写字母、词干提取等)
  2. 为火车创建了 tf-idf 矩阵。
  3. 对测试进行了预处理。
  4. 为测试数据创建了 tf-idf 矩阵。
  5. Train 和 Test 数据的词袋不同,因此特征数不同,因此我们不能使用 knn 之类的分类算法。
  6. 我将训练和测试数据合并在一起并创建了 tf-idf 矩阵。这样就解决了上述不同词袋的问题。但生成的矩阵太大而无法处理。

这是我的问题:

  1. 有没有办法为训练和测试创建准确的词袋?
  2. 如果没有并且我添加训练和测试的方法是正确的,我是否应该使用像 LDA 这样的降维算法?

【问题讨论】:

标签: nlp nltk


【解决方案1】:

您可以使用 scikit learn 的计数向量器首先为文档中的给定单词创建向量,使用它来训练您选择的分类器,然后使用分类器来测试您的数据。

对于训练集,可以使用vectorizer对数据进行如下训练:

 LabeledWords=pd.DataFrame(columns=['word','label'])

 LabeledWords.append({'word':'Church','label':'Religion'} )

 vectorizer = CountVectorizer()

 Xtrain,yTrain=vectorizer.fit_transform(LabeledWords['word']).toarray(),vectorizer.fit_transform(LabeledWords['label']).toarray()

然后您可以使用上述矢量化器训练您选择的分类器,例如:

forest = RandomForestClassifier(n_estimators = 100) 
clf=forest.fit(Xtrain,yTrain)

为了测试您的数据:

for each_word,label in Preprocessed_list:
    test_featuresX.append(vectorizer.transform(each_word),toarray())
    test_featuresY.append(label.toarray())
clf.score(test_featuresX,test_featuresY) 

【讨论】:

  • 谢谢你。如果我没记错的话,这与训练一组视觉词的方式相同,方法是为训练集创建特征码本(使用 knn 的集群)。然后预测测试图像的直方图,使用相同的码本并将其传递给您的分类器。
猜你喜欢
  • 2012-07-21
  • 2012-11-21
  • 1970-01-01
  • 2013-04-19
  • 2019-05-23
  • 2018-11-07
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
相关资源
最近更新 更多