原来机器学习这么简单——线性回归

news2024/11/20 20:38:38

引言:
在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。


一、什么是线性回归?

线性回归 是一种基本但极为重要的监督学习算法,广泛用于预测连续数值型数据。其主要目标是通过分析已知数据点之间的关系,找出一个能够用来预测新数据点的函数模型。在最简单的情况下,线性回归尝试找到一条直线,这条直线能够最佳地通过数据点,并最小化预测值与实际值之间的差异。

在线性回归模型中,我们通常假设因变量 y y y 与自变量 x x x 之间存在线性关系,这种关系可以用一个简单的数学公式表示为:

y = β 0 + β 1 x + ϵ y = \beta_0 + \beta_1x + \epsilon y=β0+β1x+ϵ

其中:

  • y y y 是因变量(即我们想要预测的值)。
  • x x x 是自变量(即我们用来预测 y y y 的值)。
  • β 0 \beta_0 β0 是截距(当 x = 0 x = 0 x=0 时的 y y y 值)。
  • β 1 \beta_1 β1 是斜率(表示 x x x 每增加一个单位时, y y y 的变化量)。
  • ϵ \epsilon ϵ 是误差项(表示由于模型简化或其他未被观测到的因素所造成的偏差)。

二、线性回归的原理

线性回归的核心思想 是找到一组最优的模型参数 β 0 \beta_0 β0 β 1 \beta_1 β1,使得模型的预测值与实际观测值之间的误差最小。这个过程通常通过最小化“残差平方和”(Sum of Squared Residuals, SSR)来实现。

图1 1 维和 2 维输入特征的线性模型

2.1 模型建立

首先,我们假设数据中的自变量 x x x 和因变量 y y y 之间存在一个线性关系,即:

y i = β 0 + β 1 x i + ϵ i y_i = \beta_0 + \beta_1x_i + \epsilon_i yi=β0+β1xi+ϵi

其中, i i i 表示数据点的索引, ϵ i \epsilon_i ϵi 是误差项。

2.2 残差和残差平方和

对于每个观测数据点 i i i,模型的预测值 y ^ i \hat{y}_i y^i 与真实值 y i y_i yi 之间的差异被称为 残差(Residual),定义为:

残差 = y i − y ^ i \text{残差} = y_i - \hat{y}_i 残差=yiy^i

为了评估模型的整体表现,我们计算所有残差的平方和,这个值被称为 残差平方和(Sum of Squared Residuals, SSR):

S S R = ∑ i = 1 n ( y i − y ^ i ) 2 = ∑ i = 1 n ( y i − ( β 0 + β 1 x i ) ) 2 SSR = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 = \sum_{i=1}^{n} (y_i - (\beta_0 + \beta_1x_i))^2 SSR=i=1n(yiy^i)2=i=1n(yi(β0+β1xi))2

2.3 最小二乘法

最小二乘法(Least Squares Method)是一种用来确定最优模型参数 β 0 \beta_0 β0 β 1 \beta_1 β1 的方法。其目标是找到参数值,使得残差平方和 S S R SSR SSR 最小化。为了达到这一目标,我们需要对 S S R SSR SSR 求导并找到其最小值。

首先,对 β 0 \beta_0 β0 β 1 \beta_1 β1 求偏导数:

∂ S S R ∂ β 0 = − 2 ∑ i = 1 n ( y i − β 0 − β 1 x i ) \frac{\partial SSR}{\partial \beta_0} = -2 \sum_{i=1}^{n} (y_i - \beta_0 - \beta_1x_i) β0SSR=2i=1n(yiβ0β1xi)

∂ S S R ∂ β 1 = − 2 ∑ i = 1 n x i ( y i − β 0 − β 1 x i ) \frac{\partial SSR}{\partial \beta_1} = -2 \sum_{i=1}^{n} x_i(y_i - \beta_0 - \beta_1x_i) β1SSR=2i=1nxi(yiβ0β1xi)

将这些偏导数设为零,可以得到以下两个方程:

∑ i = 1 n ( y i − β 0 − β 1 x i ) = 0 \sum_{i=1}^{n} (y_i - \beta_0 - \beta_1x_i) = 0 i=1n(yiβ0β1xi)=0

∑ i = 1 n x i ( y i − β 0 − β 1 x i ) = 0 \sum_{i=1}^{n} x_i(y_i - \beta_0 - \beta_1x_i) = 0 i=1nxi(yiβ0β1xi)=0

通过求解这两个方程,我们可以得到最优的 β 0 \beta_0 β0 β 1 \beta_1 β1 值:

β 1 = n ∑ i = 1 n x i y i − ∑ i = 1 n x i ∑ i = 1 n y i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 \beta_1 = \frac{n \sum_{i=1}^{n} x_i y_i - \sum_{i=1}^{n} x_i \sum_{i=1}^{n} y_i}{n \sum_{i=1}^{n} x_i^2 - (\sum_{i=1}^{n} x_i)^2} β1=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nxii=1nyi

β 0 = 1 n ∑ i = 1 n y i − β 1 1 n ∑ i = 1 n x i \beta_0 = \frac{1}{n} \sum_{i=1}^{n} y_i - \beta_1 \frac{1}{n} \sum_{i=1}^{n} x_i β0=n1i=1nyiβ1n1i=1nxi

这样一来,我们就找到了能够最佳拟合数据点的回归直线,即最优的 β 0 \beta_0 β0 β 1 \beta_1 β1 参数。

2.4 模型的评估

在得到模型后,我们需要评估其效果,常用的评估指标包括:

  • 决定系数 R 2 R^2 R2:衡量模型解释变量 x x x 对因变量 y y y 的解释能力,取值范围为 0 到 1,越接近 1 表明模型越好。
  • 均方误差(MSE):衡量模型预测值与实际值之间的平均误差平方。

三、案例分析:房价预测

我们将使用加州房价数据集(California Housing Dataset),这是一个公开的机器学习数据集,包含加利福尼亚州各地区的房屋信息,包括房价、中位数收入、住房年龄等特征。我们将通过房屋面积和中位数收入来预测房价。

1. 导入数据集和必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 设置字体,解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体字体显示中文
plt.rcParams['axes.unicode_minus'] = False  # 解决坐标轴负号显示问题

# 加载加州房价数据集
california = fetch_california_housing()
data = pd.DataFrame(california.data, columns=california.feature_names)
data['MedHouseVal'] = california.target
data
2. 创建和训练线性回归模型
# 选择特征 'MedInc' 进行建模
X = data[['MedInc', 'HouseAge', 'AveRooms', 'AveOccup']]
y = data['MedHouseVal']

# 分割数据为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 初始化线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X_train, y_train)
3. 模型预测和评估
# 使用测试集进行预测
y_pred = model.predict(X_test)

# 评估模型表现
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"均方误差(MSE): {mse}")
print(f"决定系数(R^2): {r2}")

均方误差(MSE): 0.657451727882265

决定系数(R^2): 0.49828508595474374

4. 结果展示
# 可视化预测值与实际值的比较
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.5, label="预测值 vs 实际值")
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=2, label="理想的直线 $y = x$")
plt.xlabel("实际房价")
plt.ylabel("预测房价")
plt.title("实际房价 vs 预测房价")
plt.legend()
plt.show()

四、总结

线性回归通过简单的数学关系和优化方法,为我们提供了一个有效的工具来预测连续型数据。它不仅易于理解和实现,而且在实际应用中非常有效,是入门机器学习的理想算法之一。通过深入理解线性回归的原理和计算过程,我们可以更好地掌握机器学习的核心思想,并为更复杂的算法打下坚实的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2199611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于贝叶斯决策的 CAD 程序设计方案

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

大数据新视界 --大数据大厂之大数据与量子机器学习融合:突破智能分析极限

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Linux入门3——vim的简单使用

1.vim 1.1 vim的模式 vim有三种主要模式: ①命令模式:使用vim刚打开进入的模式就是命令模式; ②插入模式:只有在插入模式下才可以做文字输入,按[Esc]键可退回命令模式; ③末行模式:文件保存或退…

希亦超声波清洗机值得购买吗?清洁技术之王多维度测评大揭秘!

随着人们生活质量的提升,高质量眼镜愈发受到欢迎,但它们的清洁与保养却常常被疏忽,导致镜片蒙尘受损,影响佩戴者的视觉清晰度。为此,超声波眼镜清洗机作为一种新兴潮流应时而生,以其高效清洁眼镜及珠宝、精…

行盒的截断样式 box-decoration-break

1. 场景举例 当我们遇到如下场景时, 很多小伙伴可能会直接为这段文字添加边框和背景颜色,但往往会发现,效果并不如预期。出现的问题如下图所示,那么该如何解决呢? 这时就需要引入一个非常实用的 CSS 属性——box-deco…

元宇宙展厅的展示方式有哪些?

元宇宙展厅的展示方式多种多样,融合了虚拟现实以及多媒体交互等先进技术,为参观者提供了前所未有的沉浸式体验。以下是一些主要的展示方式: 1、虚拟现实(VR)展示: 利用VR技术,观众可以身临其境…

开关 switch

<el-table-column label"公开 | 隐藏" align"center" width"100"><template slot-scope"scope"><el-switchv-model"scope.row.dynamicStatus":active-value"1":inactive-value"0"active…

Windows11下 安装 Docker部分疑难杂症(Unexpecter WSL error)

装了大半天Docker desktop终于装好了&#xff0c;网上有的主流教程就不复述了&#xff0c;主要说一下网上没有的教程。 以下是遇到的问题&#xff1a; 首先&#xff0c;启用或关闭Windows确保里面与虚拟机有关的几个都要选上 没有Hyper-V参考此文 但是我这里都勾选了&#x…

多电源上电时序控制

多电源上电时序控制 我们如何给这种比如说有三个电源轨道&#xff0c;有这种上电时序先后次序要求的这种器件供电呢&#xff1f;那我们有大概以下几种方法。 1.直接使用前一时序电源的输出Vout做下一时序电源的使能EN 优点:简单&#xff0c;直观&#xff0c;成本低 缺点:要关…

电力电子技术03 AC-DC整流器(2)---单相半波整流器 二极管不控整流

半波整流器是一种简单的AC-DC整流电路&#xff0c;它将输入的交流电&#xff08;AC&#xff09;的一半&#xff08;正或负半周期&#xff09;转换为直流电&#xff08;DC&#xff09;。这种电路利用二极管的单向导电特性&#xff0c;在正半周期时允许电流通过&#xff0c;而在负…

75.【C语言】文件操作(2)

承接74.【C语言】文件操作(1)文章 目录 5.详细阐释文件的打开和关闭 1.流 2.标准流 3.文件指针 FILE 两层含义 附:FILE的头文件 4.操作文件的步骤 1.fopen函数 ​编辑 简写的全称查询 输入&输出的含义 2.fclose函数 3.代码示例 补充:绝对路径和相对路径 注意…

No.14 笔记 | XSS漏洞:原理、类型与防御策略

一、HTML和JavaScript基础 1. HTML基础 HTML概述&#xff1a;超文本标记语言&#xff0c;用于实现页面跳转和显示数据。结构标准&#xff1a;包括<!doctype html>声明文档类型&#xff0c;<html>根标签&#xff0c;<head>头部标签和<body>主体标签等。…

Markdown 语法详解大全(超级版)(四)——Markdown 使用 Emoji 表情 (附:表情符号简码列表)

Markdown 语法详解大全(超级版)&#xff08;四&#xff09; ——Markdown 使用 Emoji 表情 &#xff08;附&#xff1a;表情符号简码列表&#xff09; 本文目录&#xff1a; 一、复制和粘贴表情符号 二、使用表情符号简码 三、表情符号简码列表 本系列文章&#xff1a; Ma…

阿里云CDN设置阀值的指南

在如今这个信息爆炸的时代&#xff0c;网站的访问速度和用户体验变得尤为重要。阿里云CDN&#xff08;内容分发网络&#xff09;作为一种高效的解决方案&#xff0c;帮助用户加速网站内容的分发。然而&#xff0c;如何合理设置CDN的阀值&#xff0c;确保资源的高效利用&#xf…

【有啥问啥】深度探索:COG Agent与GUI Agent的工作原理与实施策略

深度探索&#xff1a;COG Agent与GUI Agent的工作原理与实施策略 在当今的数字化时代&#xff0c;图形用户界面&#xff08;GUI&#xff09;已经成为人机交互的主流。然而&#xff0c;传统依赖于文本或代码解析的GUI自动化方法在面对复杂多变的界面时常常显得力不从心。无论是…

工业交换机的安全机制

在当今信息技术迅速发展的时代&#xff0c;工业交换机作为网络通信的重要设备&#xff0c;其安全机制愈发受到重视。工业交换机的安全性不仅关乎企业的信息保护&#xff0c;更是整个工业网络运行稳定性的基石。为了确保数据传输的安全和网络的可靠性&#xff0c;现代工业交换机…

linux程序说明

Linux 文件和目录管理命令 文件和目录 cd 切换目录 cd [目录路径]&#xff1a;进入指定的目录。 cd ~ 进入当前用户的主目录。 cd - 返回上一次所在的目录。 cd .. 进入上级目录。 cd / 进入根目录。 cd ../.. 进入上上级目录。 cd /目录路径&#xff1a;进入指定的根目录中…

如何防止图纸外泄?图纸防泄密的六个方法(图纸安全管理措施)

图纸&#xff0c;作为企业技术和设计的结晶&#xff0c;一旦外泄&#xff0c;可能造成不可估量的损失。 如何有效防止图纸外泄&#xff0c;成为企业在信息安全管理中的重要环节。 下面我们将通过六个有趣又实用的方法&#xff0c;帮助你轻松实现图纸的安全管理。 1. 安企神系…

人脸表情行为识别系统源码分享

人脸表情行为识别系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

PCL 计算点云AABB包围盒(惯性矩阵)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 计算AABB包围盒 2.1.2 可视化点云与AABB包围盒 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长…