多元线性回归实践:合成数据样本的Matplotlib可视化咨询
嘿,针对你这个线性回归合成数据的可视化需求,我给你整理了几个实用的方案,既能直观展示单个特征和y的关联,也能呈现多特征与y的整体关系,直接上代码和解释:
先补全你的数据生成代码(方便衔接)
首先假设你是用NumPy生成的数据,先把这部分代码列出来(如果你的代码不一样,替换成自己的就行):
import numpy as np import matplotlib.pyplot as plt # 生成数据 np.random.seed(42) # 固定随机种子保证可复现 x_data = np.random.randn(2000, 3) # 2000个样本,3个特征 w_real = np.array([2.5, -1.2, 0.8]) # 真实权重 b_real = 3.0 # 真实偏置 noise = np.random.randn(2000) * 0.5 # 高斯噪声 y_data = x_data @ w_real + b_real + noise # 生成真实标签
方案1:单个特征与y的关系(子图形式)
因为你有3个特征,最直观的方式是把每个特征和y的散点图放在同一个画布的子图里,这样能清晰看到每个特征和y的线性趋势:
fig, axes = plt.subplots(1, 3, figsize=(15, 4)) # 1行3列的子图 # 循环遍历每个特征,绘制散点图 for idx, ax in enumerate(axes): ax.scatter(x_data[:, idx], y_data, alpha=0.3, s=10) # alpha设置透明度避免点重叠 ax.set_title(f"Feature {idx+1} vs y") ax.set_xlabel(f"Feature {idx+1}") ax.set_ylabel("y") # 可以加上真实的拟合线,更直观 x_line = np.linspace(x_data[:, idx].min(), x_data[:, idx].max(), 100) y_line = w_real[idx] * x_line + b_real # 单个特征的权重+偏置(近似趋势) ax.plot(x_line, y_line, color='red', linewidth=2, label='True Trend') ax.legend() plt.tight_layout() # 自动调整子图间距 plt.show()
这个方案的好处是简单易懂,能快速看到每个特征和y的线性相关性,适合初步探索数据。
方案2:三维特征与y的关系(三维散点图)
如果想同时展示三个特征和y的关系,可以用三维散点图,把三个特征作为坐标轴,y值用颜色来区分:
from mpl_toolkits.mplot3d import Axes3D fig = plt.figure(figsize=(10, 8)) ax = fig.add_subplot(111, projection='3d') # 绘制三维散点,c=y_data表示用y的数值来着色 scatter = ax.scatter(x_data[:, 0], x_data[:, 1], x_data[:, 2], c=y_data, cmap='viridis', alpha=0.5, s=15) ax.set_xlabel("Feature 1") ax.set_ylabel("Feature 2") ax.set_zlabel("Feature 3") ax.set_title("3 Features vs y (colored by y value)") # 添加颜色条,解释颜色对应的y值 plt.colorbar(scatter, label='y value') plt.show()
这个方案能让你看到三个特征组合起来和y的整体分布,不过三维图建议在交互模式下拖动视角,能更清楚地观察数据规律。
方案3:真实y与预测y的对比(训练后用)
等你训练完线性回归模型得到预测值y_pred后,还可以画真实值和预测值的散点图,加上y=x的参考线,直观评估拟合效果:
# 假设你已经训练得到y_pred # y_pred = model.predict(x_data) plt.figure(figsize=(8, 8)) plt.scatter(y_data, y_pred, alpha=0.3, s=10) plt.plot([y_data.min(), y_data.max()], [y_data.min(), y_data.max()], color='red', linewidth=2, label='Perfect Prediction') plt.xlabel("True y") plt.ylabel("Predicted y") plt.title("True y vs Predicted y") plt.legend() plt.grid(True) plt.show()
如果点越靠近红色的y=x线,说明你的模型拟合效果越好。
以上这几个方案基本能覆盖你从数据探索到模型评估的可视化需求,你可以根据自己的需求选择使用~
内容的提问来源于stack exchange,提问作者lame_coder
相关产品推荐
相关产品推荐

