当使用矢量化器将文本转换为数字特征时,在训练TfidfVectorizer(...).fit_transform(text)
中使用TfidfVectorizer(...).fit(text)
。在测试中,它假设利用以前的训练信息,并在训练拟合后转换数据。
在一般情况下,测试运行与列车运行完全分开。但它需要一些关于在训练阶段获得的拟合的信息,否则转换会失败并出现错误sklearn.utils.validation.NotFittedError: idf vector is not fitted
。这不仅仅是一本字典,它是别的东西。
培训完成后应该保存什么,以使测试阶段顺利通过?
换句话说,训练和测试在时间和空间上是分开的,如何利用训练结果使测试工作?
更深层次的问题是"适合"在scikit-learn上下文中意味着什么,但它可能超出了范围
在测试阶段,应使用与训练阶段相同的模型名称。通过这种方式,您将能够使用在训练阶段派生的模型参数。下面是一个示例;
- 首先给你的矢量化器和你的预测算法起一个名字(在本例中是NB)
矢量化器 = TfidVectorizer()
分类器 = 多项式NB()
- 然后,使用这些名称对数据进行矢量化和预测
trainingdata_counts = vectorizer.fit_transform(trainingdata.values)
classifier.fit(trainingdata_counts, trainingdatalabels)
testdata_counts = vectorizer.transform(testdata.values)
预测=分类器.预测(testdata_counts)
通过这种方式,您的代码将能够连续处理训练和测试阶段。