You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何degree=1的PolynomialFeatures线性回归与直接实现结果不同

问题核心原因

根本错误:你对标签y做了多项式转换,完全改变了拟合目标,两组实验从原理上就不等价

  • PolynomialFeatures(degree=1)的作用是给输入矩阵追加1列全为1的偏置项,你把一维标签y输入转换后得到的predict_是二维数组:第一列全为1,第二列才是你原本要预测的freq值。此时你的回归任务从「预测freq的一维值」变成了「同时预测全1列和freq值的二维数组」,和第一组实验的任务完全不同。
  • 你看到的MSE降低、R2升高完全是虚假结果:模型对第一列全1值的预测误差几乎为0,直接拉低了整体MSE,同时全1列的拟合优度接近1,大幅拉高了整体R2得分,这个结果和你原本要做的「freq预测任务」没有任何关系。
  • 另外你粘贴的两段代码都缺失了ypred = regr2.predict(X_test)这一步,如果你实际运行时确实没写这行,ypred会是之前生成的旧变量值,也会导致结果计算错误。

修正后即可得到等价结果

去掉第二段代码中对y的错误转换,调整偏置参数即可和第一组结果完全一致:

from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=1)
X_ = poly.fit_transform(X)
# 直接使用原y作为标签,不做转换
y_ = y
X_train, X_test, y_train, y_test = train_test_split(X_, y_, test_size=0.33, random_state=42)
# PolynomialFeatures已经加了偏置列,关闭LinearRegression的自动偏置避免共线性
regr2 = linear_model.LinearRegression(fit_intercept=False)
regr2.fit(X_train, y_train)
ypred = regr2.predict(X_test)
print(metrics.mean_squared_error(ypred,y_test))
print(r2_score(y_test,ypred))

运行后得到的MSE和R2会和第一组代码完全相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:42:00