You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scikit-learn线性回归报错:期望二维数组,却得到一维数组

解决scikit-learn线性回归predict时的2D数组要求错误

这个报错的核心原因很明确:scikit-learn的所有监督学习模型,都要求输入特征必须是2D数组格式——哪怕你只预测单个样本。你在model.predict([12])里传入的[12]是1D数组,不符合模型的输入规范,所以触发了这个ValueError。

两种快速解决方法


方法1:直接用嵌套列表模拟2D数组

最简单的修改方式,就是把单个输入值放进嵌套列表里,让它变成「1个样本,1个特征」的2D结构:

from sklearn.linear_model import LinearRegression
# Training data
X = [[6], [8], [10], [14],[18]]
y = [[7], [9], [13], [17.5], [18]]
# Create and fit the model
model = LinearRegression()
model.fit(X, y)
# 把[12]改成[[12]],符合2D输入要求
print 'A 12" pizza should cost: $%.2f' % model.predict([[12]])[0]

方法2:用reshape重塑数组(适合numpy场景)

如果你的数据是numpy数组格式,或者需要处理批量样本的情况,可以用reshape(-1,1)来自动调整维度:

import numpy as np
from sklearn.linear_model import LinearRegression
# Training data
X = [[6], [8], [10], [14],[18]]
y = [[7], [9], [13], [17.5], [18]]
# Create and fit the model
model = LinearRegression()
model.fit(X, y)
# 将1D数组重塑为2D(-1表示自动计算该维度的长度)
input_val = np.array([12]).reshape(-1, 1)
print 'A 12" pizza should cost: $%.2f' % model.predict(input_val)[0]

为什么会有这个要求?

scikit-learn的API设计是统一的:所有模型的fit、predict方法,都期望特征输入是**(样本数量, 特征数量)**的2D数组。你的训练数据X是[[6], [8], ...],已经符合这个格式(5个样本,每个样本1个特征),所以fit过程没问题;但预测时传入的[12]是1D结构(形状为(1,)),模型无法识别这是「1个样本+1个特征」,因此报错提示你调整维度。

内容的提问来源于stack exchange,提问作者fear_matrix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:14:04