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

【机器学习03】学习率与特征工程、多项式回归、逻辑回归

文章目录

  • 一、线性回归的实践技巧
    • 1.1 调试梯度下降
      • 1.1.1 学习曲线 (Learning Curve)
      • 1.1.2 如何选择学习率 α
    • 1.2 特征工程 (Feature Engineering)
    • 1.3 多项式回归 (Polynomial Regression)
  • 二、逻辑回归与分类问题
    • 2.1 什么是分类问题
      • 2.1.1 线性回归用于分类的局限
    • 2.2 逻辑回归模型
      • 2.2.1 Sigmoid 函数
      • 2.2.2 模型表示与解读
    • 2.3 决策边界 (Decision Boundary)
      • 2.3.1 线性决策边界
      • 2.3.2 非线性决策边界
  • 三、逻辑回归的代价函数
    • 3.1 平方误差代价函数的局限性
    • 3.2 逻辑损失函数 (Logistic Loss Function)
      • 3.2.1 当 y=1 时
      • 3.2.2 当 y=0 时
    • 3.3 代价函数与梯度下降
      • 3.3.1 简化版代价函数
      • 3.3.2 逻辑回归的梯度下降


视频链接
吴恩达机器学习p21-p31

注明:受markdown语法所限, x⃗表示x向量


一、线性回归的实践技巧

在前一篇文章中,我们已经学习了线性回归的模型、代价函数以及梯度下降算法。在这一部分,我们将探讨一些让模型训练更高效、功能更强大的实用技巧。

1.1 调试梯度下降

梯度下降是一个迭代过程,我们如何确保它在正确地工作呢?关键在于监控代价函数 J 的变化。

1.1.1 学习曲线 (Learning Curve)

一个行之有效的方法是绘制学习曲线(Learning Curve),即以梯度下降的迭代次数(# iterations为横轴,代价函数 J(w⃗, b) 的值为纵轴。

在这里插入图片描述

  • 正常表现:一条正常的学习曲线应该是单调递减的。随着迭代次数的增加,代价 J 的值会不断下降,最终趋于平缓,表明算法已经收敛(converged)
  • 自动收敛测试:在代码中,我们可以设置一个自动收敛的判断标准。例如,设定一个很小的阈值 ε (epsilon,如 0.001),如果在一次迭代中,J 值的下降小于这个阈值,我们就可以认为算法已经收敛。

1.1.2 如何选择学习率 α

学习率 α 的选择对梯度下降的性能至关重要。学习曲线可以帮助我们诊断 α 是否合适。

在这里插入图片描述

  • α 过大:如果学习曲线不降反升,或者上下剧烈震荡,这通常意味着学习率 α 设置得太大了,导致算法在最低点附近“反复横跳”,甚至发散。解决方法是使用更小的 α
  • α 过小:如果代价 J 下降得非常缓慢,说明学习率 α 可能太小了,需要很长时间才能收敛。

在这里插入图片描述

在实践中,选择 α 的一个好方法是尝试一系列呈倍数增长的数值,例如:..., 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1, ...(每次大约乘以3)。通过比较不同 α 值下的学习曲线,我们可以快速找到一个既能确保收敛又不会太慢的合适值。

1.2 特征工程 (Feature Engineering)

除了调整算法本身,我们还可以通过特征工程来提升模型的性能。特征工程指的是利用我们对问题的理解和直觉,通过对原始特征进行变换或组合,来创造出新的、可能更有用的特征。

在这里插入图片描述

例如,在房价预测中,我们有两个原始特征:房屋的临街宽度 x₁ (frontage) 和纵深 x₂ (depth)。我们知道,房屋的面积(area是决定价格的关键因素。因此,我们可以创造一个新特征 x₃ = x₁ * x₂,并将其加入到模型中。这样,模型就可能更好地捕捉到房价与面积之间的关系。

1.3 多项式回归 (Polynomial Regression)

有时候,数据点之间的关系并不是一条直线。为了拟合这些非线性的数据,我们可以使用多项式回归(Polynomial Regression)

在这里插入图片描述

实现多项式回归的核心思想,就是通过特征工程,将原始特征的多次方作为新的特征。例如,我们可以将原来的模型:
f(x) = w₁x + b
扩展为二次或三次模型:
f(x) = w₁x + w₂x² + b
f(x) = w₁x + w₂x² + w₃x³ + b

通过添加这些高次项特征,我们的模型就能拟合出各种弯曲的曲线,从而更好地适应非线性的数据模式。

注意:在使用多项式回归时,特征的尺度会变得差异巨大(例如 x 在 1-1000, 就在 1-10⁹),此时特征缩放变得至关重要

在这里插入图片描述

我们甚至可以尝试各种函数变换,比如 √x 等。如何选择最合适的特征,是机器学习中一个更深入的课题。

二、逻辑回归与分类问题

到目前为止,我们都在讨论回归(Regression问题,即预测一个连续的数值。现在,我们将转向机器学习的另一个核心领域:分类(Classification)

2.1 什么是分类问题

分类问题的目标是预测一个离散的类别。

在这里插入图片描述

例如:

  • 这封邮件是垃圾邮件吗?(是/否)
  • 这笔交易是欺诈性的吗?(是/否)
  • 这个肿瘤是恶性的吗?(是/否)

当类别只有两种时,我们称之为二元分类(Binary Classification)。习惯上,我们用 01 来代表这两个类别。例如,0 代表“良性肿瘤”(负类),1 代表“恶性肿瘤”(正类)。

2.1.1 线性回归用于分类的局限

我们可能会想,能否直接用线性回归来解决分类问题呢?答案是否定的。

在这里插入图片描述

如果直接用线性回归拟合分类数据,模型的输出值可能会远大于1或远小于0,这在分类场景下没有实际意义。并且,线性模型往往无法很好地拟合分类数据的决策边界。因此,我们需要一个专门为分类问题设计的算法——逻辑回归(Logistic Regression)

2.2 逻辑回归模型

逻辑回归的核心思想是,将线性回归的输出结果,通过一个特殊的函数,“压缩”到 01 之间。

2.2.1 Sigmoid 函数

这个起关键作用的函数被称为 Sigmoid 函数,也叫 Logistic 函数

在这里插入图片描述

其数学表达式为:g(z) = 1 / (1 + e⁻ᶻ)

它的特性是:无论输入 z 的值有多大或多小,输出 g(z) 的值永远在 01 之间。

2.2.2 模型表示与解读

逻辑回归模型将线性部分 z = w⃗ · x⃗ + b 的输出,作为 Sigmoid 函数的输入。

在这里插入图片描述

完整的模型表达式为:
f_w⃗,b(x⃗) = g(w⃗ · x⃗ + b) = 1 / (1 + e⁻⁽ʷ⃗·ˣ⃗⁺ᵇ⁾)

在这里插入图片描述

逻辑回归模型的输出值 f(x) 有一个非常好的概率解释:它代表了在给定输入 x 的条件下,预测类别为 1 的概率。即:
f(x) = P(y=1 | x; w⃗, b)

例如,如果模型对一个肿瘤样本输出 0.7,这意味着模型认为该肿瘤有70%的概率是恶性(y=1)的。

2.3 决策边界 (Decision Boundary)

有了概率输出后,我们如何做出最终的分类决策呢?通常我们以 0.5 作为阈值。

在这里插入图片描述

  • 如果 f(x) ≥ 0.5,则预测 ŷ = 1
  • 如果 f(x) < 0.5,则预测 ŷ = 0

由于 Sigmoid 函数 g(z)z=0 时取值为 0.5,所以上述决策规则等价于:

  • 如果 z = w⃗ · x⃗ + b ≥ 0,则预测 ŷ = 1
  • 如果 z = w⃗ · x⃗ + b < 0,则预测 ŷ = 0

此时,由方程 z = w⃗ · x⃗ + b = 0 所定义的线(或面、超平面)就成为了决策边界(Decision Boundary)。它将特征空间一分为二,一边是预测为 1 的区域,另一边是预测为 0 的区域。

2.3.1 线性决策边界

z 是特征的线性组合时,决策边界就是线性的。

在这里插入图片描述

例如,如果 z = x₁ + x₂ - 3 = 0,那么决策边界就是一条直线 x₁ + x₂ = 3

2.3.2 非线性决策边界

逻辑回归的强大之处在于,通过结合特征工程(例如多项式特征),它可以学习到非常复杂的非线性决策边界。

在这里插入图片描述

例如,如果我们创建一个模型 g(w₁x₁² + w₂x₂² + b),并假设学习到的参数使得 z = x₁² + x₂² - 1 = 0,那么决策边界就是一个圆形 x₁² + x₂² = 1

在这里插入图片描述

通过引入更复杂的多项式特征,逻辑回归可以拟合出椭圆、甚至任意形状的决策边界,使其能够解决高度复杂的分类问题。

三、逻辑回归的代价函数

我们已经定义了逻辑回归的模型,接下来需要一个代价函数来衡量模型的预测与真实标签之间的差异,从而通过梯度下降来优化参数 w⃗b

在这里插入图片描述

3.1 平方误差代价函数的局限性

我们可能会想,是否可以直接沿用线性回归中的平方误差代价函数?

J(w⃗, b) = (1/m) * Σ [ (f(x⁽ⁱ⁾) - y⁽ⁱ⁾)² ]

在这里插入图片描述

答案是否定的。因为逻辑回归的模型 f(x) 是一个非线性的 Sigmoid 函数,如果将它代入平方误差代价函数,会得到一个非凸(non-convex的函数。这种函数有很多局部最小值点,梯度下降算法很可能陷入其中一个,而无法保证找到全局最优解。

因此,我们需要为逻辑回归设计一个全新的、能够保证是凸函数的代价函数。

3.2 逻辑损失函数 (Logistic Loss Function)

为了构建总的代价函数(Cost Function),我们首先为单个训练样本定义一个损失函数(Loss Function) L(f(x), y)

在这里插入图片描述

逻辑回归的损失函数定义如下:

  • 如果真实标签 y=1: L = -log(f(x))
  • 如果真实标签 y=0: L = -log(1 - f(x))

我们来直观地理解这个函数是如何工作的:

3.2.1 当 y=1 时

在这里插入图片描述

  • 如果模型预测 f(x) 趋近于 1(与真实标签一致),那么 -log(f(x)) 的值就趋近于 0。这意味着模型的损失很小,得到了“奖励”。
  • 如果模型预测 f(x) 趋近于 0(与真实标签相反),那么 -log(f(x)) 的值会趋近于无穷大。这意味着模型受到了巨大的“惩罚”。

3.2.2 当 y=0 时

在这里插入图片描述

  • 如果模型预测 f(x) 趋近于 0(与真实标签一致),那么 1-f(x) 趋近于 1-log(1 - f(x)) 的值就趋近于 0。模型损失很小。
  • 如果模型预测 f(x) 趋近于 1(与真实标签相反),那么 1-f(x) 趋近于 0-log(1 - f(x)) 的值会趋近于无穷大,模型受到巨大惩罚。

这个损失函数的设计非常巧妙,它确保了当模型预测正确时损失接近0,预测错误时损失会急剧增大。

3.3 代价函数与梯度下降

逻辑回归的代价函数 J(w⃗, b) 就是所有训练样本损失的平均值。

在这里插入图片描述

J(w⃗, b) = (1/m) * Σ [ L(f(x⁽ⁱ⁾), y⁽ⁱ⁾) ] (从 i=1 到 m)

这个代价函数(也被称为“对数损失”或“交叉熵损失”)被证明是一个凸函数,因此我们可以放心地使用梯度下降来寻找全局最小值。

3.3.1 简化版代价函数

为了便于数学处理,我们可以将分段定义的损失函数用一个等价的式子来表示:

在这里插入图片描述

L(f(x), y) = -y * log(f(x)) - (1-y) * log(1 - f(x))

  • y=1 时,第二项为0,公式变为 -log(f(x))
  • y=0 时,第一项为0,公式变为 -log(1 - f(x))

这与我们之前的分段定义完全一致。

[图片]

将这个简化版的损失函数代入,我们就得到了逻辑回归最终的代价函数表达式:

J(w⃗, b) = -(1/m) * Σ [ y⁽ⁱ⁾log(f(x⁽ⁱ⁾)) + (1-y⁽ⁱ⁾)log(1-f(x⁽ⁱ⁾)) ]

3.3.2 逻辑回归的梯度下降

现在,我们只需要计算出这个新的代价函数对 wⱼb 的偏导数,就可以应用梯度下降了。

[图片]

经过微积分推导后,我们得到了一个令人惊讶的简洁结果:
∂/∂wⱼ J(w⃗,b) = (1/m) * Σ [ (f(x⁽ⁱ⁾) - y⁽ⁱ⁾) * xⱼ⁽ⁱ⁾ ]
∂/∂b J(w⃗,b) = (1/m) * Σ [ (f(x⁽ⁱ⁾) - y⁽ⁱ⁾) ]

在这里插入图片描述

大家会发现,这个梯度(导数)的表达式,竟然和线性回归的梯度表达式一模一样!

这当然不是巧合,而是背后有更深的数学原理。但对我们来说,这意味着实现梯度下降时,更新参数的代码部分可以完全复用。

唯一的区别在于 f(x) 的定义

  • 在线性回归中f(x⃗) = w⃗ · x⃗ + b
  • 在逻辑回归中f(x⃗) = 1 / (1 + e⁻⁽ʷ⃗·ˣ⃗⁺ᵇ⁾)

之前我们讨论的所有梯度下降的实践技巧,如监控学习曲线、向量化实现、特征缩放等,同样完全适用于逻辑回归。

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

相关文章:

  • PyTorch解析使用张量与动态计算图实现深度学习模型的高效训练
  • 大二java学习笔记:二维数组
  • 缓存行Cache Line
  • 10-机器学习与大模型开发数学教程-第1章 1-2 O(n) 表示法与时间复杂度
  • toLua[六] Examples 05_LuaCoroutine分析
  • keil5使用STlink下载程序到stm32后不自动运行的解决办法
  • stm32大项目阶段20251015
  • 机器学习四范式(有监督、无监督、强化学习、半监督学习)
  • 源码分析 golang bigcache 高性能无 GC 开销的缓存设计实现
  • 网站开发的工资开发者应用
  • 东莞网站建设优化企业太平洋保险网站
  • transformer-注意力评分函数
  • 破解 Shuffle 阻塞:Spark RDD 宽窄依赖在实时特征工程中的实战与未来
  • TypeScript入门学习
  • 西固网站建设平台12306网站花多少钱做的
  • Linux运维实战:云原生设计与实施DockerK8S(视频教程)
  • Chroma 开源的 AI 应用搜索与检索数据库(即向量数据库)
  • 楼宇自控 DDC 系统 + IBMS 智能化集成系统:构建建筑智慧运营双核心
  • 《深度学习框架核心之争:PyTorch动态图与早期TensorFlow静态图的底层逻辑与实战对比》
  • 固件下printf函数分析
  • 做外贸都得有网站吗秦皇岛网站排名公司
  • AI-Native 能力反思(三):Prompt Engineering 自我提升神器
  • 基于Django+Vue2+MySQL前后端分离的红色故事分享平台
  • LangGraph 工作流全解析:从 Prompt 到智能体编排的革命
  • JAVA算法练习题day42
  • 天津市建设工程备案网站什么是网站的层次
  • 【基础算法】BFS
  • 国家工信部网站备案查询系统公司网址怎么做出来的
  • 做网站都用到哪些软件asp源码打开网站
  • React组件生命周期节点触发时机(组件加载Mount、组件更新Update、组件卸载Unmount)组件挂载