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

使用Polynomial回归训练加州住房数据时出现特征数不匹配错误求助

问题原因与解决方法

错误根源

  • 你训练LinearRegression时用的是原始的8维X_train,但预测时传入的是多项式转换后的45维X_test,模型的输入维度要求是训练时的8维,自然会报错维度不匹配。
  • 额外使用reshape(1, -1)是错误操作,它会把数据集的形状彻底打乱(比如把(n_samples, 8)变成(1, n_samples*8)),完全不符合模型输入要求。

正确操作流程

多项式回归的核心是对所有用于训练和预测的特征数据,都要使用同一个PolynomialFeatures转换器进行转换,步骤如下:

  1. 拆分训练集和测试集后,先初始化PolynomialFeatures对象;
  2. 用训练集的特征X_train拟合转换器(让转换器学习原始特征的多项式组合规则),同时转换X_train得到X_train_poly;
  3. 用转换后的X_train_poly训练LinearRegression模型;
  4. 用同一个转换器转换X_test得到X_test_poly,再用训练好的模型进行预测。

修正后的代码示例

from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

# 获取数据集并取50%数据
data = fetch_california_housing()
X, y = data.data, data.target
X_half, _, y_half, _ = train_test_split(X, y, train_size=0.5, random_state=42)

# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_half, y_half, test_size=0.2, random_state=42)

# 初始化多项式特征转换器
poly = PolynomialFeatures(degree=2, include_bias=False)  # include_bias=False避免和LinearRegression的截距重复

# 拟合转换器并转换训练集特征
X_train_poly = poly.fit_transform(X_train)

# 用转换后的训练集训练模型
model = LinearRegression()
model.fit(X_train_poly, y_train)

# 用同一个转换器转换测试集特征,然后预测
X_test_poly = poly.transform(X_test)
y_pred = model.predict(X_test_poly)

# 验证(可选)
print(f"训练后模型接受的输入维度: {model.coef_.shape[0]}")
print(f"转换后测试集的特征维度: {X_test_poly.shape[1]}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:45:33