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

零基础入门机器学习 -- 第三章第一个机器学习模型——线性回归

3.1 线性回归的概念

在现实生活中,许多事情都遵循某种线性关系,比如:

  • 房价 vs 面积:房子的面积越大,价格通常越高。
  • 工资 vs 工作经验:工作经验越多,薪资往往更高。
  • 汽车油耗 vs 车速:在一定范围内,车速越快,油耗可能越高。

线性回归(Linear Regression) 是机器学习中最基础的算法之一,它用于研究两个变量之间的线性关系,即一个变量(自变量)如何影响另一个变量(因变量)。


3.2 线性回归的数学直觉

线性回归的核心思想是找到一条最合适的直线,用来预测未知数据。

假设我们要预测房价(价格)与房屋面积(平方英尺)的关系,我们可以绘制一个散点图:

📌 示例:房价 vs 面积

面积(平方英尺)价格(万元)
50050
70075
1000100
1200130
1500160

当我们把数据点画在图上,可能会看到一个趋势:面积越大,房价越高

1. 线性回归的公式

线性回归试图找到如下直线:
y = mx + b

其中:

  • ( y ) 是预测值(如房价)
  • ( x ) 是输入值(如面积)
  • ( m ) 是斜率,表示面积对房价的影响程度
  • ( b ) 是截距,表示当面积为 0 时,房价的基准值

2. 直觉理解

  • 斜率(m):如果 ( m ) 很大,表示面积对房价的影响很大(房价涨得快)。
  • 截距(b):如果 ( b ) 很大,说明即使房子面积很小,房价也不会太低。

我们让计算机来学习这条直线,使得它能最小化误差,即预测值与真实值之间的偏差尽可能小。


3.3 实践案例:预测房价

3.3.1 使用 Python 构建线性回归模型

我们使用 scikit-learn(简称 sklearn)来实现线性回归。sklearn 是 Python 机器学习的标准库,提供了各种算法和数据处理工具。

📌 3.3.2 代码实现

我们使用 sklearn.linear_model.LinearRegression 进行训练,并绘制预测结果。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 训练数据:房屋面积(平方英尺)
X = np.array([500, 700, 1000, 1200, 1500]).reshape(-1, 1)  # 需要转换成二维数组
# 目标数据:房价(万元)
y = np.array([50, 75, 100, 130, 160])

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

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

# 预测房价
X_test = np.array([600, 800, 1100, 1400]).reshape(-1, 1)  # 新面积数据
y_pred = model.predict(X_test)  # 预测房价

# 输出预测结果
for i in range(len(X_test)):
    print(f"面积 {X_test[i][0]} 平方英尺的预测房价:{y_pred[i]:.2f} 万元")

# 解决中文显示问题
plt.rcParams["font.sans-serif"] = ["SimHei"]  # Windows 和 Mac 可能需要不同字体
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题

# 绘制训练数据
plt.scatter(X, y, color='blue', label="实际数据")

# 绘制预测的线
plt.plot(X, model.predict(X), color='red', label="回归直线")

# 添加标题和标签
plt.xlabel("面积(平方英尺)")
plt.ylabel("房价(万元)")
plt.title("线性回归:房价预测")
plt.legend()
plt.show()

📌 3.3.3 代码解析

  • np.array([...]).reshape(-1, 1):将数据转换成二维数组(因为 sklearn 需要二维输入)。
  • LinearRegression().fit(X, y):用 X(面积)训练模型,使它学习面积与房价的关系
  • model.predict(X_test):用训练好的模型预测新房价。

📌 3.3.4 运行结果

示例预测输出:

面积 600 平方英尺的预测房价:61.37 万元
面积 800 平方英尺的预测房价:83.28 万元
面积 1100 平方英尺的预测房价:116.15 万元
面积 1400 平方英尺的预测房价:149.01 万元

图表显示:

  • 蓝色点:训练数据
  • 红色直线:模型学习到的最优拟合线
    在这里插入图片描述

3.4 关键难点总结

  1. 为什么要转换 X.reshape(-1, 1)

    • 因为 sklearn 要求 X二维数组(即 n 行 1 列)。
    • 如果 X 是一维数组,需要 .reshape(-1, 1)
  2. 如何衡量模型的好坏?

    • model.score(X, y) 返回决定系数(R² 值),接近 1 说明模型拟合较好。
  3. 如果数据不符合线性关系怎么办?

    • 线性回归适用于线性关系的数据。如果数据是非线性的,应该考虑多项式回归或神经网络

3.5 课后练习

📌 练习 1:预测汽车价格

数据

车型里程(万公里)价格(万元)
A120
B315
C510
D76
E94

🚀 任务

  • 用 Python 实现线性回归,预测6 万公里8 万公里的汽车价格。

📌 练习 2:不同的数据集,结果会怎样?

  • 修改房价数据,尝试增加/减少数据点,观察预测结果的变化。
  • 思考:数据点少会导致什么问题?(过拟合还是欠拟合?)

3.6 练习讲解

如果你完成了练习 1,代码可能会类似于:

X = np.array([1, 3, 5, 7, 9]).reshape(-1, 1)
y = np.array([20, 15, 10, 6, 4])
model = LinearRegression()
model.fit(X, y)

X_test = np.array([6, 8]).reshape(-1, 1)
y_pred = model.predict(X_test)
print(y_pred)

你会发现二手车价格的下降趋势是线性的,而房价可能更复杂(非线性)。


3.7 本章小结

✅ 线性回归适用于线性关系的数据。
sklearnLinearRegression 可以快速实现训练和预测。
✅ **数据预处理(如 reshape)**是机器学习的基本技能。
可视化有助于理解模型效果。

🚀 下一章:我们将学习分类问题,并使用 逻辑回归 来预测数据类别! 🎯

相关文章:

  • java安全中的类加载
  • 【一文读懂】HTTP与Websocket协议
  • Java堆外内存的高效利用与性能优化
  • 【DeepSeek】DeepSeek小模型蒸馏与本地部署深度解析DeepSeek小模型蒸馏与本地部署深度解析
  • DevOps工具链概述
  • 【Unity3D优化】使用ASTC压缩格式优化内存
  • CNN-BiLSTM卷积神经网络双向长短期记忆神经网络多变量多步预测,光伏功率预测
  • 如何在Excel和WPS中进行翻译
  • C++ 通过XML读取参数
  • 【网络安全】常见网络协议
  • 国际主流架构框架整理【表格版】简介、适用场景、优缺点、中文名、英名全称,附TOGAF认证介绍
  • 基于微信小程序的场地预约设计与实现
  • 好好说话:深度学习扫盲
  • Windows系统下设置Vivado默认版本:让工程文件按需打开
  • 【Oracle篇】浅谈执行计划中的多表连接(含内连接、外连接、半连接、反连接、笛卡尔连接五种连接方式和嵌套、哈希、排序合并三种连接算法)
  • java项目当中使用redis
  • Elasticsearch:同义词在 RAG 中重要吗?
  • 信呼OA办公系统sql注入漏洞分析
  • SQL布尔盲注+时间盲注
  • 【进阶OpenCV】 (7)--视频处理 - 之 - 背景建模及目标跟踪
  • 哈马斯与以色列在多哈举行新一轮加沙停火谈判
  • 哪条线路客流最大?哪个站点早高峰人最多?上海地铁一季度客流报告出炉
  • 著名心血管病学专家李国庆教授逝世,享年63岁
  • 嫩黑线货物列车脱轨致1名路外人员死亡,3人被采取刑事强制措施
  • 国寿资产获批参与第三批保险资金长期投资改革试点
  • 《日出》华丽的悲凉,何赛飞和赵文瑄演绎出来了