python - 如何将 TfidfVectorizer 的输出馈送到 Sklearn 中的 LinearSVC 分类器?
问题描述
我正在尝试使用LinearSVC
Scikit learn 构建一个线性分类器。我决定使用 tf-idf 矢量化来矢量化文本输入。我写的代码是:
review_corpus = list(train_data_df['text'])
vectorizer = TfidfVectorizer(max_df = 0.9,stop_words = 'english')
%timeit tfidf_matrix = vectorizer.fit_transform(review_corpus)
我现在想使用这个 tfidf_matrix 训练一个 SVM 模型,并用它来预测相应测试集的类/标签:test_data_df['text']
. 我遇到的问题:
- 仅使用训练数据来构建 TfIdfVectorizer 是否正确,还是应该同时使用训练和测试文本数据来构建矢量化器?
主要问题是:如何获得测试数据的矩阵表示?目前,我不确定如何从矢量化器中获取测试集中不同文档的 tfidf 分数。我尝试的是遍历 Pandas 系列
test_data_df['text']
,然后执行以下操作:tfidf_matrix.todense(list(text)
对于系列中的每个文本,将结果放入列表中,最后从中创建一个 numpy 数组,但出现内存错误。
解决方案
您应该只使用训练数据来构建
TfIdfVectorizer()
. 这将确保您在训练过程中不会泄露有关测试数据的任何信息。利用
tfidf_matrix_test = vectorizer.transform(test_data_df['text'])
现在您可以将 提供tfidf_matrix_test
给分类器。
PS:
尽量避免将 Vectorizer 的 sparse_matrix 输出转换为列表或密集数组。因为它是内存密集型的,分类器在训练/预测时也会花费更多的计算时间。
推荐阅读
- timer - 如何创建基于时间的 Flutter App?
- haskell - Haskell $ 运算符在实际使用中
- c++ - 未定义对 log4cpp 的引用(GENIE 生成器安装错误消息)
- php - 关于php解析api返回的json问题
- opencart-module - 如何在 opencart 3 的我的帐户部分创建自定义选项卡?
- linux - arm linux系统调用中vector_swi()中使用的堆栈指针是如何初始化的?
- linux - crontab 无法删除文件夹
- reactjs - Google Drive上传文件rest api返回401错误
- cytoscape.js - 根据边的数据和目标的数据选择边
- node.js - 通过 node.js 将几何对象解析为 wkt