循环排除单行构建n-1行线性回归模型及自动标注绘图实现
留一法线性回归建模与可视化实现
针对给定的10行数据集,需要实现以下操作:
- 遍历每个
Name对应的行,每次排除该行后使用剩余9行数据构建线性回归模型 - 为每个模型生成包含散点图(全部数据)和回归线(基于n-1行数据)的可视化图表
- 在图表中标注建模时排除的行(格式:
except [Name])
完整实现代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.formula.api as smf # 构造给定的固定数据集 data = [ ['A', 5.910131, 3.845061], ['B', 2.500393, 3.477255], ['C', 3.946845, 3.564572], ['D', 7.102233, 4.191507], ['E', 6.168895, 4.072600], ['F', -0.943195, 1.883879], ['G', 3.875221, 3.909606], ['H', 1.121607, 2.233903], ['I', 1.241953, 2.529120], ['J', 2.526496, 2.330901] ] df = pd.DataFrame(data, columns=['Name', 'X', 'y']) # 遍历每个Name执行留一法建模与可视化 for name in df['Name']: # 筛选排除当前行后的建模数据集 df_subset = df[df['Name'] != name] # 拟合线性回归模型(公式可根据需求调整为X ~ y) model = smf.ols('y ~ X', data=df_subset).fit() # 生成覆盖全部数据X范围的序列,用于绘制平滑回归线 x_range = np.linspace(df['X'].min(), df['X'].max(), 100) y_pred = model.predict(pd.DataFrame({'X': x_range})) # 绘制可视化图表 plt.figure(figsize=(6, 4)) plt.scatter(df['X'], df['y'], color='blue', label='All Data') plt.plot(x_range, y_pred, color='red', linewidth=2, label='Regression Line') plt.title(f"Linear Regression (except {name})") plt.xlabel('X') plt.ylabel('y') plt.legend() plt.show()
关键细节说明
- 固定数据集:直接使用给定的数据集,避免随机生成导致结果不一致
- 留一法筛选:通过
df[df['Name'] != name]快速排除当前行,得到n-1行的建模子集 - 模型拟合:使用
statsmodels的OLS方法构建线性回归模型,公式可根据实际需求切换为X ~ y(与原代码逻辑对齐) - 回归线优化:生成覆盖全部数据X范围的序列来预测y值,保证回归线完整覆盖图表区间,避免仅用离散点绘制的折线不平滑
- 图表标注:通过标题明确标注当前模型排除的行,同时保留全部数据的散点图,便于对比排除单一行对回归线的影响
内容的提问来源于stack exchange,提问作者Dinesh
相关产品推荐
相关产品推荐

