报错Expected 2D array, got 1D array:线性回归预测输入维度问题
解决线性回归预测的形状不匹配问题
问题根源
你的训练数据形状不符合sklearn LinearRegression的要求。当前m是(1,6)的数组,被模型识别为1个样本、6个特征,但实际你需要的是单变量线性回归(1个特征、6个样本),这导致预测时模型错误地要求传入6个特征值。
修正步骤
1. 调整训练数据的形状
将输入特征m和标签c转置,转换为(n_samples, n_features)的标准格式:
import numpy as np from sklearn.linear_model import LinearRegression # 转置后形状为(6,1):6个样本,每个样本1个特征 m = np.array([[1,5,3,6,10,20]]).T # 转置后形状为(6,1):对应6个样本的标签 c = np.array([[100,500,300,600,1000,2000]]).T model = LinearRegression() model.fit(m, c)
2. 正确的预测方式
预测时需保证输入为2D数组(形状(n_samples, 1)),以下两种方式都可以:
- 单个值预测:
model.predict([[5]]) # 双层括号构造(1,1)的2D数组 - 任意数量值的批量预测:
# 方式1:手动构造2D数组 model.predict([[5], [7], [12]]) # 方式2:用reshape自动转换(更便捷) input_values = np.array([5, 7, 12]) model.predict(input_values.reshape(-1, 1)) # reshape(-1,1)自动将1D数组转为(n,1)的2D数组
reshape(-1,1)中的-1会让numpy自动计算样本数量,无论你输入多少个单个值,都能转换成模型要求的格式。
内容的提问来源于stack exchange,提问作者mauricio
相关产品推荐
相关产品推荐

