如何在Sklearn中用.reshape()配合PolynomialFeatures适配多变量多项式回归输入
问题根源与解决方法
你遇到的错误本质是训练和预测时用的特征维度不匹配:
- 训练模型时,你用了经
PolynomialFeatures转换后的14维特征(Dum_poly) - 但预测时直接传入了原始的4维数据(
Dum_data),模型自然会报错
为什么是14维?
原始数据有4个特征,生成2次多项式特征(include_bias=False)时,特征包含:
- 4个原始一次特征
- 6个两两交互项(比如x1x2、x1x3等,组合数C(4,2)=6)
- 4个各特征的二次项(x1²、x2²等)
加起来4+6+4=14,这就是模型期望的特征数。
修正代码
预测时必须用训练时的同一个poly_fit对象对输入数据做相同的多项式转换,而不是直接传原始数据:
# 导入依赖库 import pandas as pd from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression # 创建数据 Dum_data = pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) Dum_data_y = pd.DataFrame([[13],[14],[15]]) # 生成2次多项式特征 poly_fit = PolynomialFeatures(degree = 2, include_bias = False) Dum_poly = poly_fit.fit_transform(Dum_data) # 训练线性模型 modl = LinearRegression() modl.fit(Dum_poly, Dum_data_y) # 预测:先对输入数据做相同的多项式转换 Dum_data_poly_pred = poly_fit.transform(Dum_data) Dum_y_pred = modl.predict(Dum_data_poly_pred) print(Dum_y_pred)
额外说明
你看到的reshape()解决的是单特征(比如1维数据)的维度适配问题,而你的情况是特征转换未同步,和reshape无关。只要保证训练和预测的输入都经过相同的多项式特征转换,不管是DataFrame还是numpy数组都可以正常使用。
内容的提问来源于stack exchange,提问作者DeCodened
相关产品推荐
相关产品推荐

