fig, axes = plt.subplots(1, 2, figsize=(14, 5)) # 创建1行2列子图
# 左图:CV MSE比较
axes[0].plot(cv_lambda_range, ridge_cv_mse_scores, linewidth=2.5, label='岭回归 (Ridge)', color='#008080') # Ridge曲线
axes[0].plot(cv_lambda_range, lasso_cv_mse_scores, linewidth=2.5, label='套索 (Lasso)', color='#E3120B') # Lasso曲线
axes[0].axvline(optimal_ridge_lambda, color='#008080', linestyle='--', alpha=0.5) # Ridge最优λ标记
axes[0].axvline(optimal_lasso_lambda, color='#E3120B', linestyle='--', alpha=0.5) # Lasso最优λ标记
axes[0].set_xscale('log') # 对数刻度
axes[0].set_xlabel('$\\lambda$', fontsize=13) # 横轴
axes[0].set_ylabel('交叉验证 MSE', fontsize=13) # 纵轴
axes[0].set_title('CV 误差比较', fontsize=14) # 标题
axes[0].legend(fontsize=12) # 图例
axes[0].grid(True, alpha=0.3) # 网格
# 右图:稀疏性比较
axes[1].plot(cv_lambda_range, ridge_nonzero_counts, linewidth=2.5, label='岭回归', color='#008080') # Ridge非零系数
axes[1].plot(cv_lambda_range, lasso_nonzero_counts, linewidth=2.5, label='套索', color='#E3120B') # Lasso非零系数
axes[1].set_xscale('log') # 对数刻度
axes[1].set_xlabel('$\\lambda$', fontsize=13) # 横轴
axes[1].set_ylabel('非零系数数量', fontsize=13) # 纵轴
axes[1].set_title('模型稀疏性比较', fontsize=14) # 标题
axes[1].legend(fontsize=12) # 图例
axes[1].grid(True, alpha=0.3) # 网格
plt.tight_layout() # 调整间距
plt.show() # 显示