多项式岭回归:如何获取拟合得到的方程参数
获取Sklearn多项式岭回归的原始多项式系数
要从你的Pipeline模型中提取出对应原始数据的多项式系数(如$ax³+bx²+cx+d$中的a、b、c、d),需要考虑特征标准化和多项式特征生成的逆转换,具体步骤如下:
1. 提取最佳流水线模型
假设你用GridSearchCV完成了网格搜索,先获取最优模型实例:
# 假设grid_search是你的GridSearchCV拟合后的对象 best_pipe = grid_search.best_estimator_
2. 拆分流水线组件
从最优模型中取出标准化器、多项式特征生成器和岭回归模型:
scaler = best_pipe.named_steps['scaler'] poly = best_pipe.named_steps['poly'] ridge = best_pipe.named_steps['ridge']
3. 提取关键参数
获取标准化的均值、标准差,以及岭回归的系数和截距:
# 单特征场景下的标准化参数(你的问题是一元多项式,所以取索引0) mu = scaler.mean_[0] sigma = scaler.scale_[0] # 岭回归的系数和截距 coef = ridge.coef_ intercept = ridge.intercept_
4. 转换为原始数据的多项式系数
根据你选择的多项式次数(degree),将标准化后的系数转换为原始x的多项式系数:
当degree=3时(目标形式:$y = ax³ + bx² + cx + d$)
# 注意:PolynomialFeatures默认include_bias=True,特征顺序为[1, x_scaled, x_scaled², x_scaled³] c0 = coef[0] # 对应常数项特征1的系数 c1 = coef[1] # 对应x_scaled的系数 c2 = coef[2] # 对应x_scaled²的系数 c3 = coef[3] # 对应x_scaled³的系数 # 计算原始x的多项式系数 a = c3 / (sigma ** 3) b = (-3 * mu * c3) / (sigma ** 3) + c2 / (sigma ** 2) c = (3 * mu**2 * c3) / (sigma **3) + (-2 * mu * c2)/(sigma**2) + c1/sigma d = intercept + c0 + (-mu**3 * c3)/(sigma**3) + (mu**2 * c2)/(sigma**2) + (-mu * c1)/sigma
当degree=2时(目标形式:$y = bx² + cx + d$)
# 特征顺序为[1, x_scaled, x_scaled²] c0 = coef[0] c1 = coef[1] c2 = coef[2] b = c2/(sigma**2) c = (-2*mu*c2)/(sigma**2) + c1/sigma d = intercept + c0 + (mu**2 * c2)/(sigma**2) + (-mu*c1)/sigma a = 0 # 三次项系数为0
5. 验证结果
可以通过对比流水线预测和多项式计算的结果,确认系数正确性:
x_test = 5.0 # 任意测试值 y_pred_pipe = best_pipe.predict([[x_test]])[0] y_pred_eq = a * x_test**3 + b * x_test**2 + c * x_test + d print(f"流水线预测值:{y_pred_pipe:.4f}") print(f"多项式计算值:{y_pred_eq:.4f}")
注意事项
- 如果你的
PolynomialFeatures设置了include_bias=False,则岭回归的fit_intercept默认是True,此时coef的长度等于degree(无常数项特征的系数),计算时去掉c0相关项即可。 - 所有计算基于单特征回归(即你要拟合的是一元多项式),如果是多特征场景,需要调整索引和转换逻辑。
内容的提问来源于stack exchange,提问作者MikeB2019x
相关产品推荐
相关产品推荐

