错误:模型的特征数量必须与输入匹配

时间:2018-11-19 21:04:02

标签: python

我试图将图像的类别预测为0或1。这些特征存储在global_feature中:

# resize the image
image = cv2.resize(image, fixed_size)

####################################
# Global Feature extraction
####################################
fv_hu_moments = fd_hu_moments(image)
fv_haralick   = fd_haralick(image)
fv_histogram  = fd_histogram(image)

###################################
# Concatenate global features
###################################
global_feature = np.hstack([fv_histogram, fv_haralick, fv_hu_moments])
print (global_feature.shape)

# predict label of test image
prediction = clf.predict(global_feature.reshape(1,-1))[0]

# show predicted label on image
cv2.putText(image, train_labels[prediction],(20,30),cv2.FONT_HERSHEY_SIMPLEX,1.0, (0,255,255), 3)

# display the output image
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.show()

我收到此错误:

ValueError: Number of features of the model must match the input. Model n_features is 533 and input n_features is 532

我试图重塑预测,但它似乎不起作用。关于此的任何帮助将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:0)

这里的错误非常清楚:模型期望矢量为533个特征,但您给它的矢量为532个特征。如果我给您532项内容,则“预测这533项内容的结果”是不可能的。因此,在某个地方,您要么丢失要么添加了额外的索引。重塑无济于事,因为它会改变向量/矩阵的尺寸,但不会改变其中包含的项数。

进行以下操作可能会有所帮助:

  1. 弄清楚模型的训练输入是什么样的,即确切地应该有多少个项目。如果数字是532,那么您在训练中就搞砸了。

  2. 如果数字为533,则说明您已经正确地进行了训练,但在预测中却搞砸了。准确检查一下您的预测输入是什么样子,并找出丢失物品的位置(从模型预期的533到给出的532)。