吴恩达《机器学习》10-1-10-3:决定下一步做什么、评估一个假设、模型选择和交叉验证集

一、决定下一步做什么

在机器学习的学习过程中,我们已经接触了许多不同的学习算法,逐渐深入了解了先进的机器学习技术。然而,即使在了解了这些算法的情况下,仍然存在一些差距,有些人能够高效而有力地运用这些算法,而其他人可能对接下来的步骤感到陌生,不清楚如何正确运用这些知识。

在本节课程中,我们将讨论一个关键问题:在机器学习项目中,当我们面临改进算法性能的任务时,我们应该如何决定接下来的工作方向呢?为了解答这一问题,我们将以预测房价的学习例子为例,假设我们已经完成了正则化线性回归,即最小化代价函数 J 的值。

需要改进的情况

假设我们在使用训练好的模型预测新的房屋样本时发现了巨大的误差,接下来应该怎么办呢?以下是一些可能的改进方法:

1. 获取更多的训练实例

通过电话调查或上门调查等方式获取更多的不同房屋出售数据。然而,获得更多的训练数据可能代价较大,而且并不总是有效。

2. 减少特征的数量

精心挑选一小部分特征,避免过拟合。有时候,减少特征数量可以提高算法的泛化能力。

3. 获得更多的特征

有时候增加特征可以改善算法性能,但同样需要谨慎选择。

4. 增加多项式特征

引入特征的高次方,如 x^2、x^3,有时可以更好地拟合数据。

5. 调整正则化程度 𝜆

通过增加或减少正则化参数 𝜆,调整模型的复杂度,以防止过拟合或欠拟合。

避免盲目尝试

在选择这些方法时,我们不应该盲目地随机尝试,而是运用一些机器学习诊断法来帮助判断哪些方法对我们的算法是有效的。这些诊断法是一种测试方法,通过执行这些测试,我们能够深入了解算法的表现,并找到有针对性的改进方法。

在接下来的视频中,我们将学习如何评估机器学习算法的性能,并介绍一些机器学习诊断法,这些方法有助于更深入地了解算法的表现,指导我们选择下一步的改进方法。虽然实施这些诊断法可能需要一些时间,但它们能够帮助我们更有效地改进机器学习系统,节省开发时间。

二、评估一个假设

参数选择的困境

当我们选择学习算法的参数时,通常我们会优化这些参数以使训练误差最小化。然而,仅仅因为一个假设函数具有很小的训练误差,并不能说明它就是一个好的假设函数。我们已经学到了过拟合的例子,即使在训练集上表现很好的假设函数,在新的数据集上可能表现很差。

评估过拟合

为了评估算法是否过拟合,我们采用以下方法:

  1. 分割数据集: 我们将数据分为训练集和测试集,通常采用 70% 的数据作为训练集,剩下的 30% 作为测试集。重要的是,两者都应包含各种类型的数据,并在划分前对数据进行洗牌。

  2. 测试集评估:

    • 对于线性回归模型,我们使用测试集数据计算代价函数 J。
    • 对于逻辑回归模型,我们利用测试数据集计算代价函数,并计算误分类率。对于每一个测试集实例,计算 (h(x) - y)^2,然后对计算结果求平均。

这样,我们就能够在新的数据集上验证我们的模型表现,并得到更准确的评估。这种方法能够帮助我们判断模型是否过拟合,提高算法的泛化能力。

三、模型选择和交叉验证集

模型选择步骤

我们将数据划分为训练集、交叉验证集和测试集,其中分配的百分比通常为 60% 的数据作为训练集,20% 的数据作为交叉验证集,剩下的 20% 作为测试集。

模型选择的步骤如下:

  1. 使用训练集训练出多个模型,每个模型对应不同次数的二项式模型。
  2. 对每个模型使用交叉验证集计算交叉验证误差(代价函数的值)。
  3. 选择具有最小交叉验证误差的模型作为最终模型。
  4. 使用步骤 3 中选出的模型对测试集计算得出推广误差(代价函数的值)。

这个过程确保我们选择的模型在未见过的数据上表现良好,避免了仅仅根据训练误差来选择模型可能导致的过拟合问题。

误差计算方法

在以上过程中,我们使用了不同数据集上的不同误差计算方法:

  • 训练误差: 使用训练集数据计算代价函数 J。
  • 交叉验证误差: 对于每一个模型,使用交叉验证集数据计算代价函数。
  • 测试误差: 对于最终选出的模型,使用测试集数据计算代价函数。

这样的综合考虑可以更全面地评估模型的性能,确保所选择的模型对于未知数据的泛化能力较强。

参考资料

[中英字幕]吴恩达机器学习系列课程

黄海广博士 - 吴恩达机器学习个人笔记

相关推荐
fake_ss1982 小时前
AI时代学习全栈项目开发的新范式
java·人工智能·学习·架构·个人开发·学习方法
AI技术控2 小时前
《Transformers are Inherently Succinct》论文解读:从“能表达什么”到“多紧凑地表达”
人工智能·python·深度学习·机器学习·自然语言处理
Upsy-Daisy2 小时前
AI Agent 项目学习笔记(二):Spring AI 与 ChatClient 主链路解析
人工智能·笔记·学习
orion-orion3 小时前
学习理论:在线弃权学习
机器学习·统计学习·学习理论
C+++Python4 小时前
C++ 进阶学习完整指南
java·c++·学习
杨浦老苏4 小时前
AI原生笔记应用Tolaria
笔记·ai·markdown·obsidian
中屹指纹浏览器5 小时前
浏览器网络栈隔离技术研究:TCP/IP底层指纹生成与规避原理
经验分享·笔记
sulikey5 小时前
个人Linux操作系统学习笔记2 - gcc与库的理解
linux·笔记·学习·操作系统·gcc·
南浦别a5 小时前
第102天--时隔多日的书写
学习·程序人生
Jackyzhe5 小时前
从零学习Kafka:消费者组重平衡
分布式·学习·kafka