热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

吴恩达《机器学习》课程笔记——第八章:正则化

上一篇※※※※※※※※【回到目录】※※※※※※※※下一篇8.1过拟合问题我们首先来解释一下什么叫欠拟合和过拟合。左边的图:该模型是一个线性模型,不能很好

上一篇  ※※※※※※※※  【回到目录】  ※※※※※※※※  下一篇


8.1 过拟合问题

我们首先来解释一下什么叫欠拟合和过拟合。

左边的图:该模型是一个线性模型,不能很好地拟合出训练集,有较大的偏差,这就是欠拟合;ps:当然,对于数据集较为简单的情况,我们也可以采取取对数等预处理方式,从而使得线性模型能较好的拟合出数据,但不太常用。

中间的图:增加了一个特征?之后,该模型可以较好的拟合出训练集;

右边的模型:增加过多的特征?,虽然模型非常好的拟合了,但是由于过于强调去拟合训练集的数据,丢失了算法的本质:预测新数据。当我们拿该模型去预测其他的测试集数据时,效果会较差,存在高方差问题,这就是过拟合。

除了回归问题,分类问题中也存在这样的情况:(从左到右依次为欠拟合、拟合恰当、过拟合)

过拟合问题出现的根本原因是特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。 过度的拟合了训练数据,而没有考虑到泛化能力。

因此,解决过拟合问题的方式有:

1、降低特征维度:丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如 PCA);

2、正则化: 保留所有的特征,但是减少这些特征的大小(白话说叫让多余的特征没有存在感)。

3、增加训练数据:使用较大的训练数据也可以减少过拟合问题,但是一般收集数据集比较麻烦。

 


8.2 代价函数

在上面的回归问题中,出现过拟合问题的模型为:ℎ?(?) = ?0 + ?1?1 + ?2?22 + ?3?33 + ?4?44  。从前面的三个例子中我们知道,正是因为高阶项导致了过拟合的产生,如果我们能使这些高阶项的系数(如?3、?4)变为0的话,那么就可以较好的拟合了。

因此,一定程度上减小这些参数 ? 的值,就是正则化的基本方法。因此我们将所有的特征带入惩罚过程,并让代价函数的最优化程序来决定惩罚的程度。

修改后的代价函数:

其中,? 称为正则化系数。注意:j 是从1开始的,我们不对 ?0 进行惩罚。

增加正则化项可以使 ? 减小的原因在于:优化过程中,为了使代价函数尽可能的小,在? 的值较大的情况下,所有的  ? 都得在一定程度上减小。

正则化后的模型与原模型对比如下:

 

如果 ? 取得过大,那么所有的参数都最小化了,使得模型变成了 ℎ?(?) = ?0 ,变成了欠拟合。所以对于正则化,我们需要选取一个合理的  ? 。


8.3 线性回归的正则化

对于线性回归问题,我们之前介绍过两种学习算法:梯度下降和正规方程。接下来介绍将正则化加入到两种学习算法中的细节。

1、梯度下降

因为未对?0 进行正则化,因此梯度下降算法被分开处理(?0 为一部分,其他的?为一部分):

整理第二个式子:

对于未增加正则化项的式子:

可以看出:正则化线性回归的梯度下降,其变化主要在于:每次在原有的更新规则基础上令 ? 值减少了一个额外的值。 

2、正规方程

我们同样也可以利用正规方程来求解正则化线性回归模型:

公式中矩阵的维度为:(n+1,n+1)。


8.4 Logistic回归的正则化

在第七章中,我们学习了多种优化算法:基础的为梯度下降,以及一些高级优化算法(见7.6)。

在这些高级优化算法中,你需要做的是设计好代价函数 J(?) ,然后调用高级优化算法去最小化 J(?) 。 

与线性回归一样,我们也需要修改代价函数,即在代价函数中添加正则化项:

1、梯度下降

 

这看起来和线性回归的梯度下降过程一样,然而我们需要注意的是:在逻辑回归中,h?(x) = g(?TX),与线性回归完全不同。

2、高级优化算法

我们依旧可以用 fminuc 函数等高级优化算法来求解代价函数最小化的参数,值得注意的是参数?0的更新规则与其他情况不同。


 

 

如果这篇文章帮助到了你,或者你有任何问题,欢迎扫码关注微信公众号:一刻AI  在后台留言即可,让我们一起学习一起进步!

以上,就是吴恩达机器学习课程第八章的主要内容。

 

 

 

【重要提示】:本人机器学习课程的主要学习资料包括:吴恩达教授的机器学习课程和黄广海博士的中文学习笔记。感谢吴恩达教授和黄广海博士的知识分享和无私奉献。作为机器学习小白,计划每周末记录一周以来的学习内容,总结回顾。希望大家多多挑错,也愿我的学习笔记能帮助到有需要的人。


转:https://www.cnblogs.com/lky-learning/p/10637592.html



推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 词袋模型的通俗介绍
    词,袋, ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
author-avatar
闹闹依旧不闹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有