KNN查询数据维度必须与训练数据维度匹配

时间:2018-12-13 09:43:23

标签: python machine-learning scikit-learn knn

我正在尝试使用“数据袋”问题,该数据集有两列-摘要和解决方案。我正在使用KNN。火车数据集有91列,测试数据集有15列。

要生成矢量,我正在使用以下代码。

vectorizer = CountVectorizer()
train_bow_set = vectorizer.fit_transform(dataset[0]).todense()
 print( vectorizer.fit_transform(dataset[0]).todense() )
 print( vectorizer.vocabulary_ )

我训练了它。

classifier = KNeighborsClassifier(n_neighbors=3)  
classifier.fit(train_bow_set, dataset[1]) 

现在,我正在测试。

y_pred = classifier.predict(test_bow_set) 

在这里,我对其进行测试时遇到以下错误:

sklearn/neighbors/binary_tree.pxi in sklearn.neighbors.kd_tree.BinaryTree.query()
**ValueError: query data dimension must match training data dimension**

2 个答案:

答案 0 :(得分:2)

我想您正在将vectorizer再次拟合到测试数据上,而不是使用transform函数。

确保您正在执行以下操作。

test_bow_set = vectorizer.transform(test_dataset)

答案 1 :(得分:0)

您再次适合矢量化器:

train_bow_set = vectorizer.fit_transform(dataset[0]).todense()

您需要从训练中保留矢量化器 (实际上是所有预处理元素),并且仅使用变换。再次拟合将深刻改变结果。

train_bow_set = vectorizer.transform(dataset[0]).todense()