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

线性回归入门:用 Python 从零实现简单预测模型

线性回归是机器学习中最基础也最实用的算法之一,特别适合初学者入门。它的核心思想是找到变量之间的线性关系,从而实现对未知数据的预测。本文将用通俗的语言解释线性回归的基本概念,并通过一个完整的 Python 案例,带您从零开始实现一个简单的线性回归模型。

一、什么是线性回归?

简单来说,线性回归就是用一条直线来 "最好地" 拟合数据点,从而描述自变量和因变量之间的关系。

举个生活中的例子:我们想研究 "学习时间" 和 "考试成绩" 之间的关系。收集到以下数据:

学习时间(小时)考试成绩(分)
160
265
375
480
585

通过观察可以发现,学习时间越长,成绩通常越高,呈现出一种近似直线的关系。线性回归就是要找到这条最能代表这种关系的直线,以便预测 "学习 6 小时能得多少分"。

二、线性回归的数学表达

简单线性回归(只有一个自变量)的数学公式非常简单:

y = wx + b

其中:

  • y 是我们要预测的结果(因变量),比如考试成绩
  • x 是输入的特征(自变量),比如学习时间
  • w 是斜率(权重),表示 x 每增加 1 个单位,y 平均增加多少
  • b 是截距,表示当 x=0 时,y 的取值

我们的目标就是找到最合适的wb,使得这条直线尽可能接近所有的数据点。

三、如何找到最佳的 w 和 b?

寻找最佳参数的过程称为 "模型训练",核心思想是让预测值与真实值之间的误差最小。常用的方法是最小二乘法,即最小化所有数据点的 "预测值与真实值之差的平方和"。

用数学公式表示,就是最小化以下损失函数:

损失 = Σ(y真实 - y预测)² = Σ(y真实 - (wx + b))²

幸运的是,我们不需要手动计算这个复杂的公式,Python 的机器学习库已经帮我们实现了这个过程。

四、用 Python 实现线性回归的完整步骤

下面我们通过一个具体案例,展示如何用 Python 实现线性回归。我们将使用scikit-learn库(机器学习常用库)和matplotlib库(绘图库)。

步骤 1:安装必要的库

如果还没有安装这些库,可以用以下命令安装:

pip install numpy pandas scikit-learn matplotlib

步骤 2:导入库

首先,我们需要导入后续会用到的 Python 库:

import numpy as np  # 用于数值计算
import matplotlib.pyplot as plt  # 用于绘图
from sklearn.linear_model import LinearRegression  # 线性回归模型

步骤 3:准备数据

我们用上面提到的 "学习时间与考试成绩" 数据来进行演示:

# 学习时间(自变量x)
study_time = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)  # reshape是为了满足模型输入要求# 考试成绩(因变量y)
scores = np.array([60, 65, 75, 80, 85])

我们可以先绘制散点图,直观地看看数据分布:

plt.scatter(study_time, scores, color='blue')
plt.xlabel('学习时间(小时)')
plt.ylabel('考试成绩(分)')
plt.title('学习时间与考试成绩的关系')
plt.show()

运行这段代码,会看到一个散点图,显示学习时间和成绩之间的正相关关系。

步骤 4:创建并训练模型

使用scikit-learn库中的LinearRegression类来创建模型并进行训练:

# 创建线性回归模型
model = LinearRegression()# 训练模型(拟合数据)
model.fit(study_time, scores)

训练完成后,我们可以查看模型找到的最佳参数wb

# 获取斜率w
w = model.coef_[0]# 获取截距b
b = model.intercept_print(f"斜率w: {w:.2f}")
print(f"截距b: {b:.2f}")
print(f"回归方程: y = {w:.2f}x + {b:.2f}")

运行结果应该类似:

斜率w: 6.50
截距b: 55.50
回归方程: y = 6.50x + 55.50

这个结果告诉我们:学习时间每增加 1 小时,考试成绩平均增加 6.5 分。

步骤 5:可视化拟合结果

我们可以将拟合出的直线与原始数据点一起绘制,直观地查看拟合效果:

# 绘制原始数据点
plt.scatter(study_time, scores, color='blue', label='实际数据')# 绘制拟合直线
plt.plot(study_time, model.predict(study_time), color='red', linewidth=2, label=f'拟合直线: y = {w:.2f}x + {b:.2f}')plt.xlabel('学习时间(小时)')
plt.ylabel('考试成绩(分)')
plt.title('学习时间与考试成绩的线性回归')
plt.legend()  # 显示图例
plt.grid(alpha=0.3)  # 显示网格
plt.show()

从图中可以看到,红色直线很好地穿过了数据点,代表了学习时间和成绩之间的线性关系。

步骤 6:模型评估

我们可以用决定系数(R²)来评估模型的拟合效果,R² 的取值范围是 [0,1],越接近 1 表示拟合效果越好:

# 计算R²
r2 = model.score(study_time, scores)
print(f"决定系数R²: {r2:.2f}")

在这个案例中,R² 应该接近 1,说明拟合效果很好。

步骤 7:进行预测

有了训练好的模型,我们就可以用它来预测新的数据了。比如预测学习 6 小时的考试成绩:

# 预测学习6小时的成绩
new_time = np.array([[6]])  # 注意输入格式是二维数组
predicted_score = model.predict(new_time)print(f"学习6小时,预测成绩为: {predicted_score[0]:.2f}分")

运行结果应该是约 94.5 分(6.5×6 + 55.5 = 94.5)。

五、完整代码汇总

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression# 1. 准备数据
study_time = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
scores = np.array([60, 65, 75, 80, 85])# 2. 绘制原始数据散点图
plt.scatter(study_time, scores, color='blue')
plt.xlabel('学习时间(小时)')
plt.ylabel('考试成绩(分)')
plt.title('学习时间与考试成绩的关系')
plt.show()# 3. 创建并训练模型
model = LinearRegression()
model.fit(study_time, scores)# 4. 获取模型参数
w = model.coef_[0]
b = model.intercept_
print(f"斜率w: {w:.2f}")
print(f"截距b: {b:.2f}")
print(f"回归方程: y = {w:.2f}x + {b:.2f}")# 5. 可视化拟合结果
plt.scatter(study_time, scores, color='blue', label='实际数据')
plt.plot(study_time, model.predict(study_time), color='red', linewidth=2, label=f'拟合直线: y = {w:.2f}x + {b:.2f}')
plt.xlabel('学习时间(小时)')
plt.ylabel('考试成绩(分)')
plt.title('学习时间与考试成绩的线性回归')
plt.legend()
plt.grid(alpha=0.3)
plt.show()# 6. 模型评估
r2 = model.score(study_time, scores)
print(f"决定系数R²: {r2:.2f}")# 7. 进行预测
new_time = np.array([[6]])
predicted_score = model.predict(new_time)
print(f"学习6小时,预测成绩为: {predicted_score[0]:.2f}分")

六、线性回归的应用场景

线性回归虽然简单,但在实际生活中有很多应用:

  1. 房价预测:根据房屋面积、房龄等因素预测房价
  2. 销量预测:根据广告投入预测产品销量
  3. 成绩预测:根据学习时间、出勤率等预测考试成绩
  4. 健康预测:根据体重、运动量预测血压、血糖等指标

七、总结

本文介绍了线性回归的基本概念和 Python 实现方法,主要包括:

  1. 线性回归的核心是用一条直线拟合数据,找到变量间的线性关系
  2. 简单线性回归的数学表达式是 y = wx + b
  3. 用 scikit-learn 库可以快速实现线性回归模型
  4. 模型训练后可以得到参数 w 和 b,并用于预测新数据

线性回归是机器学习的基础,掌握它有助于理解更复杂的算法。下一篇文章我们将介绍更复杂的多元线性回归,即多个自变量的情况。

希望这篇文章能帮助您入门线性回归,如果有任何问题,欢迎在评论区留言讨论!

http://www.dtcms.com/a/475522.html

相关文章:

  • 网站优化名词解释做网站详情的图片
  • 宁波公司做企业网站自己免费建设网站
  • 嘉兴网站制作优化学校怎么创建网站
  • 网站推广步骤奉贤专业网站建设
  • 无锡的网站建设公司成都到西安需要核酸检测吗
  • 上海seo网站排名优化公司阿里云服务器登录
  • 住房建设城乡网站东营造价信息网
  • 人才网站查询档案辽宁seo推广软件
  • 湛江网站建设优化推广网站备案 不备案
  • 做网站用什么面板好品牌网站设计视频教程
  • 现在用什么软件做网站石家庄外贸网站推广
  • 易语言做电影网站源码网页设计软件排名
  • 万网怎么创建网站吗建站本
  • 短网址生成器免费秦洁婷seo博客
  • 嵌入式 Linux 简介—第一部分(共3部分)
  • ORACLE 19c ADG部署
  • 网站开发如何收费织梦网站维护
  • 无锡做网站电商设计公司官网
  • seo如何优化网站推广石家庄网站建设机构
  • 长沙做网站咨询公司网站搭建工具视频
  • 网站怎样优化关键词好视频推广方案模板
  • 坪山网站建设渠道技术好的手机网站建设
  • Lorax_linux构建软件
  • 网站建设管理维护责任书好看的团队官网源码
  • 不利于优化网站的因素wordpress做微信支付
  • wordpress快速加载企业网站seo优帮云
  • 马尾网站建设相册制作
  • 类和对象(类的默认6个成员函数以及操作符重载,日期类的实现)
  • Speedtest by Ookla:网速测速工具
  • 网站建设借鉴wordpress 教育主题