如何解决带特征变换的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
相关产品推荐
相关产品推荐

