当前位置: 首页 > article >正文

使用python实现线性回归

一、概述

本代码主要演示了如何使用 Python 的 numpymatplotlib 和 sklearn 库进行简单线性回归分析。通过生成模拟数据,训练线性回归模型,对模型进行评估,并将结果可视化,帮助用户理解线性回归的基本原理和操作流程。

二、依赖库

  1. numpy:用于数值计算和数组操作,如生成随机数和处理数组数据。
  2. matplotlib.pyplot:用于数据可视化,绘制散点图和回归线。
  3. sklearn.linear_model.LinearRegression:用于创建和训练线性回归模型。
  4. sklearn.metrics.mean_squared_error 和 sklearn.metrics.r2_score:分别用于计算均方误差(MSE)和 \(R^2\) 分数,评估模型的性能。

三、代码详细解释

1. 导入必要的库

收起

python

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

  • 导入 numpy 库并将其别名为 np,方便后续使用。
  • 导入 matplotlib.pyplot 库并将其别名为 plt,用于绘图。
  • 从 sklearn.linear_model 模块中导入 LinearRegression 类,用于创建线性回归模型。
  • 从 sklearn.metrics 模块中导入 mean_squared_error 和 r2_score 函数,用于评估模型性能。

2. 设置中文字体

收起

python

plt.rcParams['font.family'] = 'SimSun'

  • 设置 matplotlib 的字体为宋体,确保在绘图时可以正常显示中文。

3. 生成模拟数据

收起

python

np.random.seed(42)  # 固定随机种子
X = np.random.rand(100, 1) * 10  # 生成 100 个 0~10 之间的特征值
y = 3 * X + 5 + np.random.randn(100, 1) * 2  # y = 3x + 5 + 噪声

  • np.random.seed(42):固定随机种子,确保每次运行代码时生成的随机数相同,方便结果的复现。
  • X = np.random.rand(100, 1) * 10:使用 np.random.rand 函数生成一个形状为 (100, 1) 的数组,数组中的元素是 0 到 1 之间的随机数,然后将其乘以 10,得到 100 个 0 到 10 之间的特征值。
  • y = 3 * X + 5 + np.random.randn(100, 1) * 2:根据真实方程 \(y = 3x + 5\) 生成目标值,并添加高斯噪声(使用 np.random.randn 函数生成),模拟真实世界中的数据。

4. 创建和训练线性回归模型

收起

python

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X, y)

  • model = LinearRegression():创建一个 LinearRegression 类的实例,即一个线性回归模型。
  • model.fit(X, y):使用生成的特征值 X 和目标值 y 对模型进行训练,让模型学习 X 和 y 之间的线性关系。

5. 模型预测

收起

python

# 预测
y_pred = model.predict(X)

  • y_pred = model.predict(X):使用训练好的模型对特征值 X 进行预测,得到预测的目标值 y_pred

6. 获取模型参数

收起

python

# 获取模型参数
slope = model.coef_[0][0]  # 斜率
intercept = model.intercept_[0]  # 截距

  • slope = model.coef_[0][0]:从模型的系数(斜率)数组中获取斜率值。
  • intercept = model.intercept_[0]:从模型的截距数组中获取截距值。

7. 打印模型参数和评估指标

收起

python

# 打印模型参数和评估指标
print(f"真实方程: y = 3x + 5")
print(f"学习到的方程: y = {slope:.2f}x + {intercept:.2f}")
print(f"均方误差 (MSE): {mean_squared_error(y, y_pred):.2f}")
print(f"R² 分数: {r2_score(y, y_pred):.2f}")

  • 打印真实方程和模型学习到的方程,方便对比。
  • 使用 mean_squared_error 函数计算均方误差(MSE),衡量模型预测值与真实值之间的平均误差。
  • 使用 r2_score 函数计算 \(R^2\) 分数,评估模型对数据的拟合程度,\(R^2\) 分数越接近 1 表示模型拟合效果越好。

8. 可视化结果

收起

python

# 可视化
plt.figure(figsize=(10, 6))
plt.scatter(X, y, color='blue', label='原始数据', alpha=0.6)
plt.plot(X, y_pred, color='red', linewidth=2, label='回归线')
plt.plot(X, 3*X+5, color='green', linestyle='--', label='真实关系')
plt.xlabel('X')
plt.ylabel('y')
plt.title('线性回归示例')
plt.legend()
plt.grid(True)
plt.show()

  • plt.figure(figsize=(10, 6)):创建一个大小为 (10, 6) 的图形窗口。
  • plt.scatter(X, y, color='blue', label='原始数据', alpha=0.6):绘制原始数据的散点图,颜色为蓝色,设置透明度为 0.6。
  • plt.plot(X, y_pred, color='red', linewidth=2, label='回归线'):绘制模型的回归线,颜色为红色,线宽为 2。
  • plt.plot(X, 3*X+5, color='green', linestyle='--', label='真实关系'):绘制真实的线性关系,颜色为绿色,线型为虚线。
  • plt.xlabel('X') 和 plt.ylabel('y'):设置 x 轴和 y 轴的标签。
  • plt.title('线性回归示例'):设置图形的标题。
  • plt.legend():显示图例,方便区分不同的图形元素。
  • plt.grid(True):显示网格线,增强图形的可读性。
  • plt.show():显示绘制好的图形。

四、总结

通过本代码示例,我们可以看到如何使用 sklearn 库进行简单线性回归分析,包括数据生成、模型训练、预测、评估和可视化。用户可以根据需要修改代码中的参数,如随机种子、数据规模、噪声水平等,进一步探索线性回归的特性。

完整代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score


plt.rcParams['font.family'] = 'SimSun'

# 生成模拟数据
np.random.seed(42)  # 固定随机种子
X = np.random.rand(100, 1) * 10  # 生成 100 个 0~10 之间的特征值
y = 3 * X + 5 + np.random.randn(100, 1) * 2  # y = 3x + 5 + 噪声

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X, y)

# 预测
y_pred = model.predict(X)

# 获取模型参数
slope = model.coef_[0][0]  # 斜率
intercept = model.intercept_[0]  # 截距

# 打印模型参数和评估指标
print(f"真实方程: y = 3x + 5")
print(f"学习到的方程: y = {slope:.2f}x + {intercept:.2f}")
print(f"均方误差 (MSE): {mean_squared_error(y, y_pred):.2f}")
print(f"R² 分数: {r2_score(y, y_pred):.2f}")

# 可视化
plt.figure(figsize=(10, 6))
plt.scatter(X, y, color='blue', label='原始数据', alpha=0.6)
plt.plot(X, y_pred, color='red', linewidth=2, label='回归线')
plt.plot(X, 3*X+5, color='green', linestyle='--', label='真实关系')
plt.xlabel('X')
plt.ylabel('y')
plt.title('线性回归示例')
plt.legend()
plt.grid(True)
plt.show()


http://www.kler.cn/a/568438.html

相关文章:

  • 【量化金融自学笔记】--开篇.基本术语及学习路径建议
  • 分布式多卡训练(DDP)踩坑
  • 物联网 水质监测设备 顶级功能 集成小范围内 高度精确GPS
  • 从0搭建Tomcat第二天:深入理解Servlet容器与反射机制
  • 启动你的RocketMQ之旅(三)-Producer启动和发送流程(上)
  • SpringCloud系列教程(十):token验证
  • Hadoop之01:HDFS分布式文件系统
  • 纳米材料简介
  • 【VitePress】vitepress 中 markdown 写作使用
  • Hadoop之02:MR-图解
  • 基于Flask实现的多语言Hello World
  • 企业如何将ERP和BPM项目结合提升核心竞争力
  • 【数据挖掘】Matplotlib
  • Kubespray部署企业级高可用K8S指南
  • 基于Python Django的人脸识别上课考勤系统(附源码,部署)
  • uniapp 系统学习,从入门到实战(七)—— 网络请求与数据交互
  • 《国密算法开发实战:从合规落地到性能优化》
  • springboot项目Maven打包遇到的问题总结
  • 使用 REINFORCE 算法强化梯度策略
  • Android Studio安装与配置详解