【发布时间】:2021-01-19 13:42:43
【问题描述】:
在 jupyter notebook 中运行以下代码时,出现值错误。
ValueError:模型的特征数量必须与输入匹配。模型 n_features 为 11,输入 n_features 为 2
如何解决这个问题?
# Visualising the Training set results
from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('red', 'green')))
我收到以下错误:
ValueError Traceback (most recent call last)
<ipython-input-42-bc13e66e79fe> in <module>
4 X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
5 np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
----> 6 plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
7 alpha = 0.75, cmap = ListedColormap(('red', 'green')))
8 plt.xlim(X1.min(), X1.max())
~\anaconda3\lib\site-packages\sklearn\ensemble\_forest.py in predict(self, X)
627 The predicted classes.
628 """
--> 629 proba = self.predict_proba(X)
630
631 if self.n_outputs_ == 1:
~\anaconda3\lib\site-packages\sklearn\ensemble\_forest.py in predict_proba(self, X)
671 check_is_fitted(self)
672 # Check data
--> 673 X = self._validate_X_predict(X)
674
675 # Assign chunk of trees to jobs
~\anaconda3\lib\site-packages\sklearn\ensemble\_forest.py in _validate_X_predict(self, X)
419 check_is_fitted(self)
420
--> 421 return self.estimators_[0]._validate_X_predict(X, check_input=True)
422
423 @property
~\anaconda3\lib\site-packages\sklearn\tree\_classes.py in _validate_X_predict(self, X, check_input)
394 n_features = X.shape[1]
395 if self.n_features_ != n_features:
--> 396 raise ValueError("Number of features of the model must "
397 "match the input. Model n_features is %s and "
398 "input n_features is %s "
ValueError: Number of features of the model must match the input. Model n_features is 11 and input n_features is 2
【问题讨论】:
-
您的模型 (
classifier) 被训练为在每个 X 输入中有 11 个数字。但是你喂它2个数字。 IE。您的预测数组np.array([X1.ravel(), X2.ravel()]).T只有两列,但应该有 11 列。 -
如果您提供您的模型代码,我们可以调查问题。
-
或者,您可以创建 11 列,方法是使用与上述相同但 11 个 X,如 X1、X2、X3...X11,更好地作为原因数组。
-
@Arty 请从这里查看完整的型号代码 --> github.com/anandsinha07/…
-
是的,在您的代码中,您正在训练模型以按第 1-11 列预测第 12 列。因此,在代码的最后一部分中,当您进行可视化和预测时(当您遇到异常时),您只提供了两列 X1、X2,但需要提供 11 列。
标签: python numpy machine-learning jupyter-notebook data-science