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

sklearn LinearRegression特征数不匹配报错解决方法

报错根因

报错的核心是传入模型的特征矩阵维度写反,不符合sklearn的输入格式要求:
你代码里写的g = [df[:,1]]是把整列特征数据套了一层外层列表,最终得到的数组形状是(1, 数据总行数)——模型会把这个结构识别为「1个样本,每个样本包含N个特征」,训练完成后就会要求后续预测输入必须有N个特征,和你实际要做的单特征回归需求完全不符,自然触发维度不匹配报错。

排查方法

不需要复杂调试,训练前打印数组形状就能快速定位问题:
在model.fit()之前加两行代码:

print("特征矩阵g的形状:", np.array(g).shape)
print("标签矩阵h的形状:", np.array(h).shape)

运行后你会看到g的形状输出类似(1,5),也就是1行5列,对应模型认知里的1个样本、5个特征,和你预期的5个样本、1个特征刚好行列颠倒。

这里明确sklearn线性回归的固定输入要求:

  • 传入fit()的特征X必须是二维数组,形状固定为(样本数量, 特征数量),行代表单个样本,列代表单个特征维度
  • 哪怕只有1个特征,也不能传一维数组或者形状颠倒的二维数组,必须严格符合(n_samples, 1)的格式要求
  • 标签y可以是形状为(n_samples,)的一维数组,不需要额外转二维
修复代码

把构造特征、标签的部分改成符合维度要求的写法即可,修正后的可运行代码:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sklearn.linear_model

dados = pd.read_csv("dados.csv", thousands=',', sep = ";", header = 0, encoding='latin-1')
dados.drop('pais', axis = 1, inplace=True)

df = dados.to_numpy()
# 用reshape把单特征列转成(样本数,1)的标准二维格式
g = df[:, 1].reshape(-1, 1)
h = df[:, 0]

plt.scatter(g, h, color='blue')

model = sklearn.linear_model.LinearRegression()
model.fit(g, h)

G_new = [[22500]]
print(model.predict(G_new))

修复后训练时模型识别到的特征数是1,和你预测时传入的单特征维度匹配,就不会再报这个错。

补充:如果后续扩展为多特征回归,只要保证预测时传入的特征列数和训练时的特征列数完全一致,就不会出现这类维度报错。

内容的提问来源于stack exchange,提问作者orlando moura junior

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:33:44