【问题标题】:Predict a single value with scikit-learn leads to ValueError使用 scikit-learn 预测单个值会导致 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

谁能帮我解决这个问题?

【问题讨论】:

    标签: python scikit-learn


    【解决方案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 个预测变量.. 它看起来很合理
    猜你喜欢
    • 2021-06-25
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2023-03-09
    • 2018-02-03
    • 2015-12-19
    • 2018-01-09
    相关资源
    最近更新 更多