如何使用带有 countVectorizer.fit_transform() 的腌制分类器来标记数据
Posted
技术标签:
【中文标题】如何使用带有 countVectorizer.fit_transform() 的腌制分类器来标记数据【英文标题】:How to use pickled classifier with countVectorizer.fit_transform() for labeling data 【发布时间】:2014-11-18 05:23:45 【问题描述】:我在一组短文档上训练了一个分类器,并在获得二元分类任务的合理 f1 和准确度分数后对其进行了腌制。
在训练时,我使用 sciki-learn countVectorizer
cv 减少了特征数量:
cv = CountVectorizer(min_df=1, ngram_range=(1, 3), max_features = 15000)
然后使用fit_transform()
和transform()
方法得到变换后的训练集和测试集:
transformed_feat_train = numpy.zeros((0,0,))
transformed_feat_test = numpy.zeros((0,0,))
transformed_feat_train = cv.fit_transform(trainingTextFeat).toarray()
transformed_feat_test = cv.transform(testingTextFeat).toarray()
这一切都适用于训练和测试分类器。但是,我不确定如何将 fit_transform()
和 transform()
与经过训练的分类器的腌制版本一起使用,以预测看不见的未标记数据的标签。
我正在以与训练/测试分类器时完全相同的方式提取未标记数据的特征:
## load the pickled classifier for labeling
pickledClassifier = joblib.load(pickledClassifierFile)
## transform data
cv = CountVectorizer(min_df=1, ngram_range=(1, 3), max_features = 15000)
cv.fit_transform(NOT_SURE)
transformed_Feat_unlabeled = numpy.zeros((0,0,))
transformed_Feat_unlabeled = cv.transform(unlabeled_text_feat).toarray()
## predict label on unseen, unlabeled data
l_predLabel = pickledClassifier.predict(transformed_feat_unlabeled)
错误信息:
Traceback (most recent call last):
File "../clf.py", line 615, in <module>
if __name__=="__main__": main()
File "../clf.py", line 579, in main
cv.fit_transform(pickledClassifierFile)
File "../sklearn/feature_extraction/text.py", line 780, in fit_transform
vocabulary, X = self._count_vocab(raw_documents, self.fixed_vocabulary)
File "../sklearn/feature_extraction/text.py", line 727, in _count_vocab
raise ValueError("empty vocabulary; perhaps the documents only"
ValueError: empty vocabulary; perhaps the documents only contain stop words
【问题讨论】:
【参考方案1】:您应该使用相同的矢量化器实例来转换训练和测试数据。您可以通过使用矢量化器 + 分类器创建管道、在训练集上训练管道、腌制整个管道来做到这一点。稍后加载腌制管道并对其调用预测。
请参阅此相关问题:Bringing a classifier to production。
【讨论】:
谢谢你,奥利维尔 (@ogrisel)。您的解决方案看起来很整洁。我会试一试。但是,我使用一种简单的方法找到了解决方案:1)我将训练特征、训练标签和分类器与训练数据分开腌制,2)通过使用“腌制训练- features'3) transform() 将看不见的、未标记数据的特征转换为训练数据的维度,4) 将“pickeled-classifier”与转换后的训练特征和“pickled labels”拟合,5) 然后在转换后的 unlabeledData- 上预测标签功能。以上是关于如何使用带有 countVectorizer.fit_transform() 的腌制分类器来标记数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在本地使用带有 express 的 graphql 和带有 mongoose 的 mongodb 来检索文档?
如何使用带有路径的“开始”和带有空格的命令在 Windows 中创建批处理文件