使用 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的主要内容,如果未能解决你的问题,请参考以下文章
用于文本分类的一类 SVM 模型(scikit-learn)