任意n次多项式回归基于系数生成预测公式的实现方法
解决方案
你需要严格匹配Pipeline的训练流程计算预测值,整个过程不需要硬编码任何系数、多项式项,适配任意次数的多项式回归,用numpy自带运算即可实现,不需要额外引入scipy方法。
核心注意点
你的Pipeline包含StandardScaler标准化步骤,不能直接用原始特征乘线性模型系数,必须先对输入特征做标准化,再生成多项式特征后再做运算。
最简实现方式
直接复用Pipeline中已经训练好的组件做特征转换,配合numpy矩阵乘法计算结果:
import numpy as np # 提取Pipeline内的已训练组件 scaler = model['scaler'] poly_transformer = model['polynomial_features'] linear_model = model['linear_regression'] # 输入原始特征,单样本输入shape为(1, 5),批量输入shape为(样本数, 5) raw_input = np.array([[feat1, feat2, feat3, feat4, feat5]]) # 按训练流程依次做特征转换 scaled_input = scaler.transform(raw_input) poly_input = poly_transformer.transform(scaled_input) # 计算预测值,单样本取val[0]即可得到数值结果 val = (poly_input @ linear_model.coef_) + linear_model.intercept_
手动实现(不调用sklearn的transform方法)
如果需要完全脱离sklearn实现计算,可以先提取预处理组件的参数手动计算:
- 先做标准化:
# 提取标准化的均值和标准差 feat_mean = scaler.mean_ feat_std = scaler.scale_ # 手动计算标准化后特征 scaled_input = (raw_input - feat_mean) / feat_std
- 生成多项式特征:
你可以调用poly_transformer.get_feature_names_out()方法获取所有多项式项的生成顺序,返回结果和linear_model.coef_的索引一一对应,比如2次多项式返回结果为['x0', 'x1', 'x2', 'x3', 'x4', 'x0^2', 'x0 x1', 'x0 x2' ...],按该顺序手动计算每个多项式项的值后,和coef_对应相乘求和,再加intercept_即可得到预测值。
该方式本质和调用transform方法一致,灵活性更低,更推荐直接复用已训练组件的转换方法。
内容的提问来源于stack exchange,提问作者8-Bit Borges
相关产品推荐
相关产品推荐

