Python的Numpy进行线性拟合并绘图


前言

使用Numpy进行线性拟合并出图


一、核心函数

def linear_fit(x, y):  # 拟合函数
    # z = np.polyfit(np.log(x), np.log(y), 1)
    z = np.polyfit(x, y, 1)
    return [z[0], z[1]]

def plotfit(X, Y, w, b):  # 散点拟合图
    plt.rcParams['font.family'] = ["Times New Roman"]
    matplotlib.rcParams['font.family'] = 'Times New Roman'
    # 使字体同非 mathtext 字的字体,此处即 Times New Roman
    matplotlib.rcParams['mathtext.default'] = 'regular'
    plt.rc('font', family='times new roman')
    fig, ax = plt.subplots(1, figsize=(6, 5))
    plt.scatter(X, Y, c='black', label
<think>好的,我现在需要帮助用户用Python实现线性回归分析并生成图表。首先,我得回忆一下线性回归的基本步骤和所需的Python库。用户提到了matplotlib和sklearn,这两个库确实是关键。 首先,数据准备是第一步。用户可能需要导入数据,或者使用示例数据。考虑到用户可能没有现成的数据,我可以建议使用sklearn内置的数据集,比如波士顿房价数据集,或者生成随机数据。这里可能用生成随机数据更简单,方便用户直接运行代码。 接下来是数据预处理。通常需要将数据分为特征变量X和目标变量y。然后分割训练集和测试集,使用train_test_split函数。标准化数据也是一个常见步骤,但有时候线性回归对尺度不敏感,可能可以跳过,不过为了演示,可能包括进去更好? 然后是模型训练。使用sklearn的LinearRegression类,创建模型,用fit方法训练。之后需要得到系数和截距,这样用户可以看到模型的参数。 评估模型部分,需要计算R平方和均方误差(MSE)。这里可以用sklearn的metrics里的r2_score和mean_squared_error函数。同时,用户提到要绘制图表,可能需要散点图加回归线,以及残差图。 绘图部分,用matplotlib画布,分成两个子图,一个展示实际值与预测值的回归线,另一个展示残差分布。残差分析图可以帮助检查模型是否符合假设,比如残差是否随机分布。 现在,检查引用内容。引用[3]提到了R平方、MSE和残差图,所以代码中需要包含这些部分。同时,引用[2]提到了数据预处理和导入库,所以在代码开头需要导入必要的库,比如numpy、pandas、matplotlib、seaborn,以及sklearn的相关模块。 可能的代码结构: 1. 导入库 2. 生成示例数据 3. 分割数据 4. 训练模型 5. 预测结果 6. 评估指标 7. 绘制图表 需要注意的地方:生成数据时,使用numpy的随机状态确保可重复性。分割数据时,测试集比例通常为20-30%。在绘图时,调整布局,添加标签和标题,让图表更清晰。 用户可能遇到的问题:代码中的路径问题,如果使用真实数据可能需要调整,但示例数据不会有这个问题。另外,确保所有库都已安装,可能需要提醒用户安装必要的包,如sklearn、matplotlib等。 最后,生成相关问题,比如如何解释回归系数、处理多重共线性、正则化方法等,这些都是线性回归常见的后续问题。</think>### Python线性回归分析及图表生成步骤 #### 1. 数据准备与预处理 ```python import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import r2_score, mean_squared_error # 生成示例数据 np.random.seed(42) X = np.linspace(0, 10, 100).reshape(-1, 1) y = 3 * X.ravel() + np.random.normal(0, 2, 100) # 分割数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) ``` #### 2. 模型训练与预测 ```python # 创建模型并训练 model = LinearRegression() model.fit(X_train, y_train) # 预测结果 y_pred = model.predict(X_test) # 输出模型参数 print(f"回归系数: {model.coef_[0]:.2f}, 截距: {model.intercept_:.2f}") print(f"R²: {r2_score(y_test, y_pred):.2f}, MSE: {mean_squared_error(y_test, y_pred):.2f}") ``` #### 3. 可视化实现 ```python plt.figure(figsize=(12, 5)) # 子图1:回归线 plt.subplot(1, 2, 1) plt.scatter(X_test, y_test, color='blue', label='实际值') plt.plot(X_test, y_pred, color='red', linewidth=2, label='预测值') plt.title('线性回归拟合效果') plt.xlabel('特征变量') plt.ylabel('目标变量') plt.legend() # 子图2:残差分析 plt.subplot(1, 2, 2) residuals = y_test - y_pred plt.scatter(y_pred, residuals, color='green') plt.hlines(y=0, xmin=y_pred.min(), xmax=y_pred.max(), colors='black', linestyles='dashed') plt.title('残差分布图') plt.xlabel('预测值') plt.ylabel('残差') plt.tight_layout() plt.show() ``` #### 代码说明 1. **数据生成**: 使用$y=3x+\epsilon$构造线性关系,添加正态分布噪声$\epsilon \sim N(0,2)$ 2. **模型训练**: 通过最小二乘法求解参数$\beta$,目标函数为$\min_{\beta} \|y - X\beta\|^2$[^3] 3. **可视化**: 左图展示实际值与预测值的线性关系,右图验证残差是否满足$E(\epsilon)=0$的假设
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值