sklearn多项式回归散点与实际值不匹配,调整degree无效应如何解决
问题解决方案
核心错误原因
你的输入特征X的数值量级过高,生成多项式特征时会出现极端的数值膨胀:27万的5次幂达到2.7e27量级,远超64位浮点数的有效计算精度,线性回归参数训练完全失效,所以无论调整degree多少都无法得到合理的预测结果。
修复步骤
- 先对输入X做区间缩放,将数值压缩到0-1范围内,避免多项式特征数值爆炸
- 若需要观察拟合效果,可生成连续的采样点做预测,绘制平滑的拟合曲线
import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures from sklearn.preprocessing import MinMaxScaler DEGREE = 5 X = np.array([276237,276617, 276997, 277377, 277757, 278137, 278517, 278897, 279277, 279657]).reshape(-1, 1) y = np.array([6, 8, 2, 4, 0, 1, 7, 0, 1, 4]) # 新增:对X做归一化处理 scaler = MinMaxScaler() X_scaled = scaler.fit_transform(X) poly_feat = PolynomialFeatures(degree=DEGREE) X_poly = poly_feat.fit_transform(X_scaled) lm = LinearRegression(fit_intercept = False) lm.fit(X_poly, y) fig=plt.figure() ax=fig.add_axes([0,0,1,1]) # 绘制原始真实值散点 ax.scatter(X, y, color='b', label='真实值') # 绘制预测值散点 ax.scatter(X, lm.predict(X_poly), color='r', label='预测值') # 可选:绘制平滑拟合曲线 X_continuous = np.linspace(X.min(), X.max(), 100).reshape(-1,1) X_continuous_scaled = scaler.transform(X_continuous) X_continuous_poly = poly_feat.transform(X_continuous_scaled) ax.plot(X_continuous, lm.predict(X_continuous_poly), color='g', label='拟合曲线') ax.set_xlabel('Total Amount') ax.set_ylabel('Days to mine') ax.legend() plt.show()
效果说明
运行上述代码后,红色预测散点会和蓝色真实散点基本重合,5次多项式已经可以完美拟合这10个样本点,调整degree可以观察不同拟合程度的效果。
内容的提问来源于stack exchange,提问作者Vik
相关产品推荐
相关产品推荐

