培训和开发数据,值错误:维度不匹配

2024-05-20 01:06:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我建立了以下分类模型:

def buildData(x):
    count_vect = CountVectorizer()
    X_train_counts = count_vect.fit_transform(x)
    tf_transformer = TfidfTransformer().fit(X_train_counts)
    X_train_tf = tf_transformer.transform(X_train_counts)
    return X_train_tf

x, y = parseXml('data/training.xml')
xDev, yDev = parseXml('data/dev.xml')

x = buildData(x)
clf = MultinomialNB().fit(x, y)
predicted = clf.predict(x)
print( 'Accuracy: ', accuracy_score(y, predicted))

我使用训练数据“x”拟合模型,并在“x”上进行测试。。在

问题是,如果我想在xDev上预测它(predicted=clf.预测(xDev))显示错误。在

我认为这是因为数据没有准备好(以Tf_idf矩阵的形式),所以我把xDev数据传递给同一个函数:

^{pr2}$

但不幸的是,这个错误出现了:

Traceback (most recent call last):   File "C:/Users/BG/Desktop/P2/E2.py", line 43, in <module>
    predicted = clf.predict(xDev)   File "C:\Python35\lib\site-packages\sklearn\naive_bayes.py", line 66, in predict
    jll = self._joint_log_likelihood(X)   File "C:\Python35\lib\site-packages\sklearn\naive_bayes.py", line 725, in
_joint_log_likelihood
    return (safe_sparse_dot(X, self.feature_log_prob_.T) +   File "C:\Python35\lib\site-packages\sklearn\utils\extmath.py", line 135, in safe_sparse_dot
    ret = a * b   File "C:\Python35\lib\site-packages\scipy\sparse\base.py", line 476, in
__mul__
    raise ValueError('dimension mismatch') ValueError: dimension mismatch

Tags: inpylibpackagestflinesitetrain
1条回答
网友
1楼 · 发布于 2024-05-20 01:06:45

您需要从第一次(培训)调用开始保存并保存tf_transformer。tfˉu transformer取决于您提供给它的数据的词汇表。在您的例子中,x和xDev之间的语料库词汇表(即组合文档中所有唯一单词的集合)可能不同。这在文本分类用例中很常见。例如,您的培训x可能有1000个单词,您的xDev可能有800个单词(不同或相似)。在

如果从对buildData()的第一次调用中持久化tfüu transformer,并使用同一个tf_transformer转换xDev数据,而不是在buildData()中重新创建另一个,则错误将消失。在

在训练中应重复使用变换器中的数据。不应该像在测试数据上再次调用buildData时那样,每次为测试或生产数据重新创建它。以下是a blog创建一个重用一次创建的转换器的NLP/分类管道的替代方法。在

TL;DR-在应用程序工作流中设置以下变量一次,而不是多次

tf_transformer = TfidfTransformer().fit(X_train_counts)

相关问题 更多 >