使用 scikit-learn 预测单个值会导致 ValueError

Posted

技术标签:

【中文标题】使用 scikit-learn 预测单个值会导致 ValueError【英文标题】:Predict a single value with scikit-learn leads to ValueError 【发布时间】:2021-02-28 13:38:07 【问题描述】:

我尝试用一​​个 X 变量和一个 Y 变量做一些基本的 sklearn 东西。 Single 我用单列预测,我必须将 X 转换为 2D 数组。现在我想预测一个值,但我的模型只允许我预测一个长度为 32 的数组。

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
import numpy as np

df = pd.read_csv("https://gist.githubusercontent.com/seankross/a412dfbd88b3db70b74b/raw/5f23f993cd87c283ce766e7ac6b329ee7cc2e1d1/mtcars.csv")
df

X = df["mpg"].values.reshape(1, -1)
y = df["cyl"].values.reshape(1, -1)

y
clf = RandomForestClassifier(random_state=0)
clf.fit(X, y)

clf.predict([[35]])

ValueError:模型的特征数量必须与输入匹配。 模型 n_features 为 32,输入 n_features 为 1

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

如果你用错误形状的数据错误地拟合了模型:

X = df["mpg"].values.reshape(1, -1)
y = df["cyl"].values.reshape(1, -1)

X.shape
(1, 32)

这意味着 X 是 1 个观测值和 32 个预测变量。而您拥有的是 1 个预测变量和 32 个观测值。

应该是这样的:

X = df[["mpg"]]
y = df["cyl"]

clf = RandomForestClassifier(random_state=0)
clf.fit(X, y)

然后预测使用:

clf.predict(np.array(35).reshape(-1,1))
array([4])

【讨论】:

太好了,谢谢。不得不做这样的事情有点不直观:np.array([[34, 23, 25]]).reshape(-1,1), 对于单变量是的.. 但如果你有超过 1 个预测变量.. 它看起来很合理

以上是关于使用 scikit-learn 预测单个值会导致 ValueError的主要内容,如果未能解决你的问题,请参考以下文章

查看单个预测的模型系数

使用 Scikit-Learn 在管道中包含预测器

Scikit-Learn SVR 预测总是给出相同的值

用于文本分类的一类 SVM 模型(scikit-learn)

使用 SVM 模型和 scikit-learn 进行预测的 AttributeError

如何在 scikit-learn 中使用交叉验证获得预测概率