多项式回归迭代中,如何为每个拟合曲线生成独立绘图?
为各阶多项式拟合生成独立绘图的解决方案
你的问题出在循环中没有创建新的绘图实例,所有拟合曲线都绘制在了同一个画布上。只需在每次迭代时创建新的绘图窗口,并添加原始数据对比,就能实现每个拟合结果单独显示的需求。
修改后的完整代码
import matplotlib.pyplot as plt import numpy as np from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression from sklearn.pipeline import Pipeline from sklearn.metrics import mean_squared_error error_list=[] bias_list=[] variance_list=[] degrees=[1,3,7,11,16,20] for degree in degrees: # 每次循环创建新的绘图画布 plt.figure(figsize=(8, 6)) polybig_features = PolynomialFeatures(degree=degree, include_bias=False) lin_regressor = LinearRegression() polynomial_regression = Pipeline([("poly_features", polybig_features),("lin_regressor", lin_regressor)]) polynomial_regression.fit(X, y) y_predict= polynomial_regression.predict(X) error = mean_squared_error(y, y_predict) error_list.append(error) bias_list.append(abs(((mean_squared_error(y, y_predict))-(np.var(y_predict))))) variance_list.append(np.var(y_predict)) # 绘制原始数据散点图 plt.scatter(X, y, label='原始数据', alpha=0.6) # 绘制拟合曲线 plt.plot(X, y_predict, color='r', label=f'{degree}阶拟合曲线') # 添加图表标注 plt.title(f'{degree}阶多项式拟合结果') plt.xlabel('X') plt.ylabel('y') plt.legend() plt.tight_layout() # 显示当前绘图(若要批量保存可替换为plt.savefig()) plt.show()
关键修改说明
plt.figure():在每次循环开头创建新的绘图对象,确保每个拟合结果在独立窗口展示plt.scatter(X, y):添加原始数据点,直观对比拟合效果- 标题、坐标轴标签与图例:明确当前图对应的拟合阶数,提升可读性
plt.tight_layout():自动调整图表元素位置,避免标签重叠
内容的提问来源于stack exchange,提问作者FZL
相关产品推荐
相关产品推荐

