之前学习了线性回归,逻辑回归和梯度下降法,今天学习的这个技术能够帮助我们训练的模型对未知的数据进行更好的预测 - 正则化技术!

快来一起学习学习,学习使我快乐 (^▽^)!

一、正则化是什么?

正则化(Regulariation)这 3 个字听起来挺高大上的,其实就是一种解决机器学习过拟合问题的技术,使用这项技术可以让我们在训练集上训练的模型对未知的数据也能很好地拟合。

机器学习模型对未知数据的拟合能力又称为泛化能力。

泛化能力比较好的模型,对未知数据拟合的也比较不错,如果对训练数据产生过拟合(over-fitting)问题,那泛化能力也会变差。

当出现过拟合问题后,处理的方式有 2 种:

  • 降维:减少特征数量,把模型多项式阶数降低,这样高阶项就少了,模型曲线就不会那么复杂

  • 正则化:不直接减少特征,而是增大代价函数中特征参数的系数

我们今天要介绍的就是正则化技术,下面用个例子先来说明什么是过拟合与欠拟合。

二、过拟合 VS 欠拟合

2.1 线性回归例子

这里还以预测房价为例,分别解释以下 3 种情况:

  • 欠拟合:模型选择的特征数量太少(2 个),不能对训练数据很好地拟合,会产生高偏差

  • 正常拟合:模型选择的特征数量合适(3 个),能对训练数据拟合较好

  • 过拟合:模型选择的特征数量过多(5 个),对训练数据过度拟合,会导致高方差

在实际应用中,通常选择的特征会比较多,很容易出现过拟合,所以解决这个问题很有必要。

2.2 逻辑回归例子

逻辑回归问题同样会产生过拟合与欠拟合问题,比如这个分类问题:

这里忘记注释类型了,不过原理一样:

  • 欠拟合:用直线分类,一看就不合适,因为直观来看决策边界是圆弧形状

  • 正常拟合:决策边界是圆弧形状,拟合的效果比较好

  • 过拟合:决策边界分类的太严格了,在未知样本上的预测效果很差

简单总结下:模型的参数越多,使用的多项式次数()就越大,模型曲线就越复杂,这些高阶次的项会导致过拟合问题。

这个正则化技术要解决过拟合问题的实质就是:减小高阶次项对模型整体的影响,以此来提高模型对未知样本的预测能力。

因为我们在训练数据上训练出的模型,最终是要用到未知的样本中的,不然就失去工程应用的意义了。

OK,那下面就来正式学习下这个技术的原理,其实很容易,就是在代价函数后面加上一个正则化项公式。

三、正则化原理

3.1 在假设函数中理解正则化

我还以预测房价的例子来说明正则化技术的原理,模型的假设函数如下:

假如 表示房屋厨房面积, 表示房屋的地理位置,这两个特征导致模型阶次太高(),我想减少它俩对假设函数的影响。

也就是说我想在代价函数求得最优值后,得到的最优特征向量中这 2 个参数尽可能趋向于 0,这样上面的模型就变成:

注意了:这里只是将 ,,而并不是让他们直接等于 0,因为我们是正则化不是降维。

通过将这 2 个参数趋向于 0 使得他们的高阶次项可以忽略不计,就能得到减少 对原模型的影响了。

用个机器学习的术语来说就是:通过正则化技术来惩罚 和 这 2 个特征!让他们对模型预测产生的影响降低!

3.2 在代价函数中理解正则化

在应用中要惩罚参数需要通过对代价函数进行正则化,也就是在代价函数最小化的同时,将要惩罚的参数尽可能的设置为 0。

这里以线性回归代价函数为例,看下如何正则化 :

我们在代价函数后面加了 2 项 ,因为我们最后要将代价函数最小化,因此也需要对添加的这两项最小化。

然而因为 10000 系数比较大,这就导致为了将 整体优化变小,就需要把参数 设置的足够小,这样两者相乘的结果才能变的足够小,以此就完成了对 的正则化,比如:

需要正则化的参数前的系数需要根据实际情况来合适的选择,这里举的例子设置的 1000 和 10000。

上面的例子指定了需要正则化的参数为 ,但是在实际的应用中,因为训练集的特征非常多,我们不知道需要对哪些参数正则化。

因此我们就对所有的参数进行正则化,然后让优化算法来帮我们确定每个正则化参数前的系数,这样的代价函数如下:

代码如下:

# 线性回归正则化代价函数
# 正则化系数 lambda 设置为 1
def regularized_cost(theta, X, y, lamd = 1):# 不对 theta_0 正则化theta_one2n = theta[1:]# 正则化项, power 求平方,sum 求和regularized_term = (lamd / 2 * len(X)) * np.power(theta_one2n, 2).sum()# cost_function 是未加正则化的代价函数return cost_function(theta, X, y) + regularized_term

这就是最终的对代价函数进行正则化的公式,可以看出就是增加一个正则化项。

其中系数 称为正则化系数,要注意 ,即没有对 正则化,因为 对应的特征是 ,而 是我们人为加上的,所以没必要对 正则化。

3.3 正则化系数的影响

在正则化过程中,系数 的选择非常重要,它会对整体产生如下影响:

  • 过大:所有的参数都被过度正则化了,导致特征参数都几乎为 0,假设函数就会变为 直线,即欠拟合

  • 过小:对参数的正则化程度不够,当参数较多时,仍然会导致过拟合

  • 合适:减少高次项的影响,正常拟合

OK!正则化的原理就学习完了,下面来实际使用下正则化技术。

四、正则化代码实战

这部分我打算分别跟大家分享下如何在线性回归和逻辑回归中使用正则化编程。

4.1 线性回归正则化

因为我们在代价函数中增加了正则化项:

所以梯度下降的计算也多了一项正则化梯度(直接对正则化部分求导):

因为不需要对 正则化,所以梯度迭代的计算分为如下 2 部分:

我们发现上面第二个式子可以进一步合并 :

至此线性回归的正则化梯度公式就出来了,来用 Python 代码把它写出来:

# 添加正则化项的线性回归梯度下降
def regularized_gradient(theta, X, y, lamd = 1):# 不对 theta_0 正则化theta_one2n = theta[1:]# 正则化梯度:(lambda / m) * theta_jregularized_theta = (lamd / len(X)) * theta_one2n# 合并 theta_0regularized_term = np.concatenate([np.array([0]), regularized_theta])# 返回梯度:原梯度 + 正则化梯度return gradient(theta, X, y) + regularized_term

4.2 逻辑回归正则化

逻辑回归代价函数的正则化项与线性回归相同:

# 逻辑回归正则化代价函数
# lambda 设置为 1
def regularized_cost(theta, X, y, lamd = 1):theta_one2n = theta[1:]# lambda / (2 * m)regularized_term = (lamd / (2 * len(X))) * np.power(theta_one2n, 2).sum()# 返回加上正则化的总代价return cost_function(theta, X, y) + regularized_term

逻辑回归正则化梯度( 不同):

# 添加正则化项的逻辑回归梯度下降
def regularized_gradient(theta, X, y, lamd = 1):# 不对 theta_0 正则化theta_one2n = theta[1:]# 计算正则化项regularized_theta = (lamd / len(X)) * theta_one2n# 加上 theta_0regularized_term = np.concatenate([np.array([0]), regularized_theta])# 返回增加正则化后的总梯度return gradient(theta, X, y) + regularized_term

上面代码中的 lamb 就是正则化系数 ,在模型训练你可以试着更改它,然后测试下这个系数对模型参数的影响,以此来更加深入地理解正则化技术。

文中完整可运行代码链接:

https://github.com/DLonng/AI-Notes/blob/master/MachineLearning/code/ex2-logistic-regression/my_logistic_regular.ipynb

交流学习,进群备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

广告商、博主勿入!

【从 0 开始机学习】正则化技术原理与编程!相关推荐

  1. 机器学习中模型泛化能力和过拟合现象(overfitting)的矛盾、以及其主要缓解方法正则化技术原理初探...

    1. 偏差与方差 - 机器学习算法泛化性能分析 在一个项目中,我们通过设计和训练得到了一个model,该model的泛化可能很好,也可能不尽如人意,其背后的决定因素是什么呢?或者说我们可以从哪些方面去 ...

  2. 心得丨深度学习的技术原理、迭代路径与局限

    本文尝试复盘梳理深度学习目前的技术要点,深度学习中模型迭代的方向,以及改进后存在的局限. 第一部分:深度学习技术基本要素:神经元.神经网络.分类器.可视化框架 在深度学习领域,神经元是深度学习的基本单 ...

  3. 深度学习:技术原理、迭代路径与局限

    来源:36氪 作者:何沛宽 本文尝试复盘梳理深度学习目前的技术要点,深度学习中模型迭代的方向,以及改进后存在的局限. 第一部分:深度学习技术基本要素:神经元.神经网络.分类器.可视化框架 在深度学习领 ...

  4. 【深度学习】深度学习:技术原理、迭代路径与局限

    来源:36氪 作者:何沛宽 本文尝试复盘梳理深度学习目前的技术要点,深度学习中模型迭代的方向,以及改进后存在的局限. 第一部分:深度学习技术基本要素:神经元.神经网络.分类器.可视化框架 在深度学习领 ...

  5. 金蝶K3 14.0 泛微OA10.0 注册机 学习沟通

  6. android手机裸眼3D技术原理和编程实现

    1.裸眼3D手机从去年开始流行.做为一个卖点或者噱头,为手机的输入输出提供一抹灵动的色彩.裸眼3D可以在二维的手机屏幕上不需要配戴VR眼镜或者谷歌纸盒就能展示三维的世界的效果,一般来说要给用户提供好的 ...

  7. 深度学习Anchor Boxes原理与实战技术

    深度学习Anchor Boxes原理与实战技术 目标检测算法通常对输入图像中的大量区域进行采样,判断这些区域是否包含感兴趣的目标,并调整这些区域的边缘,以便更准确地预测目标的地面真实边界框.不同的模型 ...

  8. 【深度学习】正则化技术全面了解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 1.简介 正则化就是结构风险最小化策略的实现, 是在经验风险最小化 ...

  9. 深度学习中的正则化技术(附Python代码)

    作者:SHUBHAM JAIN 翻译:和中华 校对:丁楠雅 本文约3500字,建议阅读20分钟. 本文简单介绍了什么是正则化以及在深度学习任务中可以采用哪些正则化技术,并以keras代码具体讲解了一个 ...

  10. AI如何反低俗?今日头条推内容检测工具“灵犬”3.0,首次公开其技术原理

    安妮 发自 北三环西路 量子位 出品 | 公众号 QbitAI 男默女泪.不看不是中国人.看完惊呆.身份惊人.不看吃亏.癌症凶手--这些标题党文章的惯用词汇,还熟悉吗. 昨天(7月30日),今日头条发 ...

最新文章

  1. 使用pytorch创建神经网络并解决线性拟合和分类问题
  2. 计算机电缆2x2x1.5,计算机电缆djypvp1x2x1.5
  3. 从Spring开始,Java EE 6必须具备哪些附加功能?
  4. 阿特斯携手EDF启动建设巴西191.5MW光伏项目
  5. 【华为云技术分享】Volcano火山:容器与批量计算的碰撞
  6. python语音属于什么语音_python语音识别
  7. 产品总监的日常:管好团队必须先“正三观”
  8. Oprofile安装与使用探索
  9. 用Win2003做×××借线
  10. git安装 tor_【git安装教程 windows】怎么装git window_git安装配置教程
  11. 一、操作系统的基本概念
  12. 用python输出杨辉三角形,python输出杨辉三角
  13. GoldWave几种转换格式方法
  14. 秋招之前实习面经汇总
  15. 共享虚拟机是什么意思_苹果笔记本电脑MacBook双系统or虚拟机选择指南
  16. 如何关闭win10防火墙_如何彻底关闭win10自带杀毒软件:windows defender?
  17. 同步软件、网络同步、备份、分享工具
  18. 爬虫:一种打破3000套限制爬取所有链家二手房源的方法
  19. CMake构建动态库
  20. 信息系统项目管理:软件开发生命周期模型的选择比较

热门文章

  1. jquery动态生成的元素添加事件的方法
  2. ajax_demo:GET POST发送数据
  3. 教你摆脱低级程序猿 项目中cocopads的安装使用
  4. POJ 3624 Charm Bracelet(01背包 基础)
  5. PHP中header和session_start前不能有输出的原因
  6. 转载explicit关键字
  7. IP多播技术[为软件高校杯做准备]
  8. Altium Designer(一):SCH
  9. 小程序navigator点击有时候会闪一下
  10. [历朝通俗演义-蔡东藩-前汉]第008回 葬始皇骊山成巨冢 戮宗室豻狱构奇冤