【问题标题】:training and development data, ValueError: dimension mismatch训练和开发数据,ValueError:维度不匹配
【发布时间】:2018-08-25 23:07:27
【问题描述】:

我建立了以下分类模型:

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.predict(xDev)) 上预测它会显示错误。

我认为这是因为数据没有准备好(在 Tf_idf 矩阵形状中),所以我将 xDev 数据传递给了同一个函数:

xDev = buildData(xDev)

准备好了,可惜出现了这个错误:

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

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

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

    如果您从第一次调用 buildData() 时保留 tf_transformer 并使用相同的 tf_transformer 转换 xDev 数据,而不是在 buildData() 中再次重新创建另一个,则错误将消失。

    换句话说,tf_transformer 应该被创建一次,适合训练数据,然后重复使用。不应像您在测试数据上再次调用 buildData 时的代码那样,每次都为测试或生产数据重新创建它。这里a blog 介绍了另一种创建 NLP/分类管道的方法,该管道重用了一次创建的转换器。

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

    tf_transformer = TfidfTransformer().fit(X_train_counts)
    

    【讨论】:

      猜你喜欢
      • 2020-03-15
      • 2017-05-19
      • 2019-07-10
      • 2019-05-14
      • 2015-07-09
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多