You need to enable JavaScript to run this app. 如何解决带特征变换的sklearn多项式回归模型报错问题?
优惠活动
大模型
产品
解决方案
定价
更多

如何解决带特征变换的sklearn多项式回归模型报错问题?

报错原因拆解

原始形状匹配报错

  • 错误核心:训练阶段传入线性回归模型的输入,是经过PolynomialFeatures(degree=4)变换后的多项式特征——2个原始特征展开为degree=4的多项式后,总特征数为15,和你报错信息里的15维权重维度完全对应。但你在预测时直接把未做多项式变换的原始输入[[33,0]](仅2维)传给了模型,矩阵维度不匹配,自然无法完成运算。

修改后出现的属性不存在报错

  • 错误核心:inverse_transform是你在代码中实例化的LabelEncoder对象(即变量le)的内置方法,经过train_test_split拆分得到的y_train/y_test都是普通numpy数组,本身不具备这个方法,因此触发属性不存在的错误。
修正后可直接运行的代码
import numpy as np
import pandas as pd

dataset = pd.read_csv('music.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y = le.fit_transform(y)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
poly_reg = PolynomialFeatures(degree = 4)
X_poly = poly_reg.fit_transform(X_train)
regressor = LinearRegression()
regressor.fit(X_poly, y_train)

# 修正1:预测前对输入样本执行和训练阶段完全一致的多项式变换
processed_sample = poly_reg.transform([[33, 0]])
pred_encoded = regressor.predict(processed_sample)
# 修正2:逆变换调用LabelEncoder实例le,而非numpy数组
print(le.inverse_transform(pred_encoded))
通用避坑提示
  • 所有训练阶段对特征做的预处理(多项式展开、标准化、独热编码等),预测时必须通过同一个已经在训练集上fit过的转换器实例对输入做完全相同的变换,严禁直接把原始特征值传入训练好的模型。
  • 各类转换器、编码器的类方法(fit/transform/inverse_transform)都是绑定在类实例上的,拆分得到的数组、DataFrame等数据容器本身不具备这些方法,调用时需指向最初实例化的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 21:45:02