为何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
相关产品推荐
相关产品推荐

