吴恩达机器学习-可选的实验室-正则化成本和梯度(Regularized Cost and Gradient)

文章目录

    • 目标
    • 添加正则化
    • 正则化代价函数
    • 正则化梯度下降
    • 重新运行过拟合示例
    • 恭喜

目标

在本实验中,你将:

  • 用正则化项扩展前面的线性和逻辑代价函数。
  • 重新运行前面添加正则化项的过拟合示例。
import numpy as np
%matplotlib widget
import matplotlib.pyplot as plt
from plt_overfit import overfit_example, output
from lab_utils_common import sigmoid
np.set_printoptions(precision=8)

添加正则化

在这里插入图片描述
在这里插入图片描述
上面的幻灯片显示了线性回归和逻辑回归的成本和梯度函数。注意:

  • 成本
    • 线性回归和逻辑回归的成本函数有很大不同,但对方程进行正则化是相同的。
  • 梯度
    • 线性回归和逻辑回归的梯度函数非常相似。它们只是在实现Fwb方面有所不同

正则化代价函数

正则化线性回归的代价函数
代价函数正则化线性回归方程为:
在这里插入图片描述
将此与没有正则化的成本函数(您在之前的实验室中实现)进行比较,其形式为:
在这里插入图片描述
包括这一项激励梯度下降以最小化参数的大小。注意,在这个例子中,参数b没有被正则化。这是标准做法。下面是方程(1)和(2)的实现。注意,这使用了本课程的标准模式,对所有m个例子进行for循环。

def compute_cost_linear_reg(X, y, w, b, lambda_ = 1):"""Computes the cost over all examplesArgs:X (ndarray (m,n): Data, m examples with n featuresy (ndarray (m,)): target valuesw (ndarray (n,)): model parameters  b (scalar)      : model parameterlambda_ (scalar): Controls amount of regularizationReturns:total_cost (scalar):  cost """m  = X.shape[0]n  = len(w)cost = 0.for i in range(m):f_wb_i = np.dot(X[i], w) + b                                   #(n,)(n,)=scalar, see np.dotcost = cost + (f_wb_i - y[i])**2                               #scalar             cost = cost / (2 * m)                                              #scalar  reg_cost = 0for j in range(n):reg_cost += (w[j]**2)                                          #scalarreg_cost = (lambda_/(2*m)) * reg_cost                              #scalartotal_cost = cost + reg_cost                                       #scalarreturn total_cost                                                  #scalar

运行下面的单元格,看看它是如何工作的。

np.random.seed(1)
X_tmp = np.random.rand(5,6)
y_tmp = np.array([0,1,0,1,0])
w_tmp = np.random.rand(X_tmp.shape[1]).reshape(-1,)-0.5
b_tmp = 0.5
lambda_tmp = 0.7
cost_tmp = compute_cost_linear_reg(X_tmp, y_tmp, w_tmp, b_tmp, lambda_tmp)print("Regularized cost:", cost_tmp)

在这里插入图片描述
正则化逻辑回归的代价函数
对于正则化逻辑回归,成本函数为
在这里插入图片描述
将此与没有正则化的成本函数(在之前的实验室中实现)进行比较:在这里插入图片描述
和上面的线性回归一样,区别在于正则化项,也就是
在这里插入图片描述
包括这一项激励梯度下降以最小化参数的大小。请注意。在这个例子中,参数b没有经过正则化。这是标准做法。

def compute_cost_logistic_reg(X, y, w, b, lambda_ = 1):"""Computes the cost over all examplesArgs:Args:X (ndarray (m,n): Data, m examples with n featuresy (ndarray (m,)): target valuesw (ndarray (n,)): model parameters  b (scalar)      : model parameterlambda_ (scalar): Controls amount of regularizationReturns:total_cost (scalar):  cost """m,n  = X.shapecost = 0.for i in range(m):z_i = np.dot(X[i], w) + b                                      #(n,)(n,)=scalar, see np.dotf_wb_i = sigmoid(z_i)                                          #scalarcost +=  -y[i]*np.log(f_wb_i) - (1-y[i])*np.log(1-f_wb_i)      #scalarcost = cost/m                                                      #scalarreg_cost = 0for j in range(n):reg_cost += (w[j]**2)                                          #scalarreg_cost = (lambda_/(2*m)) * reg_cost                              #scalartotal_cost = cost + reg_cost                                       #scalarreturn total_cost                                                  #scalar

运行下面的单元格,看看它是如何工作的。

np.random.seed(1)
X_tmp = np.random.rand(5,6)
y_tmp = np.array([0,1,0,1,0])
w_tmp = np.random.rand(X_tmp.shape[1]).reshape(-1,)-0.5
b_tmp = 0.5
lambda_tmp = 0.7
cost_tmp = compute_cost_logistic_reg(X_tmp, y_tmp, w_tmp, b_tmp, lambda_tmp)print("Regularized cost:", cost_tmp)

在这里插入图片描述

正则化梯度下降

运行梯度下降的基本算法不随正则化而改变,为:
在这里插入图片描述

其中每次迭代对w执行同步更新。正则化改变的是计算梯度
用正则化计算梯度(线性/逻辑)
线性回归和逻辑回归的梯度计算几乎是相同的,不同的只是fwb的计算
在这里插入图片描述
正则化线性回归的梯度函数

def compute_gradient_linear_reg(X, y, w, b, lambda_): """Computes the gradient for linear regression Args:X (ndarray (m,n): Data, m examples with n featuresy (ndarray (m,)): target valuesw (ndarray (n,)): model parameters  b (scalar)      : model parameterlambda_ (scalar): Controls amount of regularizationReturns:dj_dw (ndarray (n,)): The gradient of the cost w.r.t. the parameters w. dj_db (scalar):       The gradient of the cost w.r.t. the parameter b. """m,n = X.shape           #(number of examples, number of features)dj_dw = np.zeros((n,))dj_db = 0.for i in range(m):                             err = (np.dot(X[i], w) + b) - y[i]                 for j in range(n):                         dj_dw[j] = dj_dw[j] + err * X[i, j]               dj_db = dj_db + err                        dj_dw = dj_dw / m                                dj_db = dj_db / m   for j in range(n):dj_dw[j] = dj_dw[j] + (lambda_/m) * w[j]return dj_db, dj_dw

运行下面的单元格,看看它是如何工作的。

np.random.seed(1)
X_tmp = np.random.rand(5,3)
y_tmp = np.array([0,1,0,1,0])
w_tmp = np.random.rand(X_tmp.shape[1])
b_tmp = 0.5
lambda_tmp = 0.7
dj_db_tmp, dj_dw_tmp =  compute_gradient_linear_reg(X_tmp, y_tmp, w_tmp, b_tmp, lambda_tmp)print(f"dj_db: {dj_db_tmp}", )
print(f"Regularized dj_dw:\n {dj_dw_tmp.tolist()}", )

在这里插入图片描述
正则化逻辑回归的梯度函数

def compute_gradient_logistic_reg(X, y, w, b, lambda_): """Computes the gradient for linear regression Args:X (ndarray (m,n): Data, m examples with n featuresy (ndarray (m,)): target valuesw (ndarray (n,)): model parameters  b (scalar)      : model parameterlambda_ (scalar): Controls amount of regularizationReturnsdj_dw (ndarray Shape (n,)): The gradient of the cost w.r.t. the parameters w. dj_db (scalar)            : The gradient of the cost w.r.t. the parameter b. """m,n = X.shapedj_dw = np.zeros((n,))                            #(n,)dj_db = 0.0                                       #scalarfor i in range(m):f_wb_i = sigmoid(np.dot(X[i],w) + b)          #(n,)(n,)=scalarerr_i  = f_wb_i  - y[i]                       #scalarfor j in range(n):dj_dw[j] = dj_dw[j] + err_i * X[i,j]      #scalardj_db = dj_db + err_idj_dw = dj_dw/m                                   #(n,)dj_db = dj_db/m                                   #scalarfor j in range(n):dj_dw[j] = dj_dw[j] + (lambda_/m) * w[j]return dj_db, dj_dw  

运行下面的单元格,看看它是如何工作的。

np.random.seed(1)
X_tmp = np.random.rand(5,3)
y_tmp = np.array([0,1,0,1,0])
w_tmp = np.random.rand(X_tmp.shape[1])
b_tmp = 0.5
lambda_tmp = 0.7
dj_db_tmp, dj_dw_tmp =  compute_gradient_logistic_reg(X_tmp, y_tmp, w_tmp, b_tmp, lambda_tmp)print(f"dj_db: {dj_db_tmp}", )
print(f"Regularized dj_dw:\n {dj_dw_tmp.tolist()}", )

在这里插入图片描述

重新运行过拟合示例

plt.close("all")
display(output)
ofit = overfit_example(True)

没拟合前如下所示(红色虚线是理想拟合曲线):
分类
在这里插入图片描述
回归
在这里插入图片描述

在上面的图表中,在前面的例子中尝试正则化。特别是:分类(逻辑回归)设置度为6,lambda为0(不正则化),拟合数据现在将lambda设置为1(增加正则化),拟合数据,注意差异。回归(线性回归)尝试同样的步骤。
分类
度为6,lambda为0(不正则化)如下:在这里插入图片描述

度为6,lambda为1(正则化)如下:
在这里插入图片描述
回归
度为6,lambda为0(不正则化)如下:
在这里插入图片描述
度为6,lambda为1(正则化)如下:
在这里插入图片描述

恭喜

你有:成本和梯度例程的例子与回归添加了线性和逻辑回归对正则化如何减少过度拟合产生了一些直觉

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

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

相关文章

GUI编程--PyQt5--QTabWidget

文章目录 组件使用信号样式设置 组件使用 QTabWidget 页签 信号 self._ui Ui_Sub() self._ui.setupUi(right) # 切换tab页 self._ui.tabWidget.currentChanged.connect(self.tab_slot)def tab_slot(self):cur_index self._ui.tabWidget.currentIndex()tab_name self._ui…

Redis 八种常用数据类型详解

夯实基础,这篇文章带着大家回顾一下 Redis 中的 8 种常用数据类型: 5 种基础数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zse…

JS ATM练习案例(复习循环知识)

需求:用户可以选择存钱、取钱、查看余额和退出功能。 分析:1循环时反复出现提示框,所以提示框写到循环里面。 2.退出的条件是4,所以是4就会结束循环 3.提前准备一个金额预存储 4取钱为减法操作,存钱为加法操作&#xf…

微信小程序修改placeholder样式

微信小程序有既定的修改placeholder的标签 一、placeholder-style直接修改样式 <input type"text" placeholder"请输入" placeholder-style"color:#e2e2e2;"></input>二、placeholder-class设置样式类 <input type"text&…

九数分三组

枚举三位数时&#xff0c;不用写三个循环&#xff0c;写出最小和最大数循环就行。在这题里要求三个数中不能有重复的数字&#xff0c;先转换为字符串&#xff0c;再转换为字符数组进行排序&#xff0c;最后比较字符串就可以得出结果。这题把结果和原因调换了一下

Python学习日记之学习turtle库(下 篇)

前言&#xff1a; 书接上篇&#xff0c;我们继续来了解Python内置库 turtle功能库。在前面的文章中&#xff0c;我们初步的了解了一下 turtle库&#xff0c;画布和画笔相关的函数&#xff0c;那么我们继续来深入了解一下吧。 详情见&#xff1a; Python学习日记之学习turtle库…

车载诊断协议DoIP系列 —— AL IPv6地址分配通用DoIP报头结构

车载诊断协议DoIP系列 —— AL IPv6地址分配&通用DoIP报头结构 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自…

深度学习进阶:揭秘强化学习原理,实战应用全解析!

作为机器学习领域的一大分支&#xff0c;强化学习以其独特的学习方式吸引了众多研究者和实践者的目光。强化学习&#xff0c;顾名思义&#xff0c;是通过不断地强化与环境的交互来优化决策策略。在这个过程中&#xff0c;智能体通过试错&#xff0c;根据环境给出的奖励信号来调…

逆变器功率软起斜率要求

安规说明 在NB32004中&#xff0c;有明确要求&#xff0c;有功功率调整速率不得超过正负10%Pn/min&#xff0c;包括起停机。 控制对象 控制功率最终是通过调整D轴电流给定来达到限制功率的目的&#xff0c;所以我们只要让D轴的电流给定限幅值按照10%/min增加就好了。 具体实…

媒体单位专用小记者报名及各类活动报名系统介绍

媒体单位专用小记者报名及各类活动报名系统介绍 小记者活动鼓励孩子们关注生活和社会&#xff0c;丰富成长体验&#xff0c;开启心智&#xff0c;淬砺思想。这不仅有助于提高他们的理性思辨力&#xff0c;还能培养他们的社会责任感和公民意识。小记者活动为学生提供了一个全新…

51单片机系列-单片机定时器

&#x1f308;个人主页&#xff1a;会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 软件延时的缺点 延时过程中&#xff0c;CPU时间被占用&#xff0c;无法进行其他任务&#xff0c;导致系统效率降低&#xff0c;延时时间越长&#xff0c;该缺点就越明显&…

【GO语言卵细胞级别教程】10.探索Go语言中神奇的Map类型:解密键值对的魔力(含习题)

【GO语言卵细胞级别教程】10.探索Go语言中神奇的Map类型&#xff1a;解密键值对的魔力&#xff08;含习题&#xff09; 文章目录 【GO语言卵细胞级别教程】10.探索Go语言中神奇的Map类型&#xff1a;解密键值对的魔力&#xff08;含习题&#xff09;1.简介2. 基本语法3.Map基本…

考研复试C语言篇

第一章 概述 1.1什么是程序 为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的合集。 1.4C语言的特点 代码级别的跨平台&#xff1a;由于标准的存在&#xff0c;使得几乎同样的C代码可用于多种操作系统&#xff0c;也适用于多种机型。使允许直接访问物理地址…

维度建模之公共明细层

在模型设计时多事务事实表和累积快照事实表的选取&#xff0c;如果是基于多个业务过程联合分析而构建的事实表&#xff0c;比如订单全流程表应设计为累积快照事实表&#xff0c;而多事务事实表应该是有多个业务过程&#xff0c;多个度量&#xff0c;并且这些业务过程还应该有一…

供应IMX290LQR-C芯片现货

长期供应各品牌芯片现货&#xff0c;SONY索尼SONY索尼CMOS/CCD芯片全系列全新现货优势出&#xff1a; IMX225LQR-C IMX415-AAQR-C IMX290LQR-C imx273llr-C IMX397CLN-C IMX637-AAMJ-C IMX647-AAMJ-C IMX991-A***-C IMX991-AABJ-C IMX287LLR-C IMX287LQR-C IMX297L…

git fetch 合并远程仓库到本地

git fetch origin master //从远程主机的master分支拉取最新内容 git merge FETCH_HEAD //将拉取下来的最新内容合并到当前所在的分支 https://www.cnblogs.com/runnerjack/p/9342362.html 使用git fetch和git merge手动解决一次pull request冲突

python可视化绘图2.0

五星红旗 import turtle import mathturtle.pensize(3) turtle.colormode(255)# 画背景 turtle.pencolor("#ed120c") turtle.fillcolor("#ed120c") turtle.begin_fill() turtle.penup() turtle.goto(-150, 100) turtle.pendown()for i in [300, 200, 300,…

Svelte之基础知识一

文章目录 参考资料什么是Svelte&#xff1f;简介添加数据{}动态属性{}嵌套组件HTML标签html创建一个应用程序 反应性能力赋值on:click{}声明$:语句$:{}更新数组和对象 属性Declaring propsexport属性对象传递{...xxx} 逻辑if语句{#if xxx}...{/if}else语句{#if xxx}...{:else}.…

Coordinate Attention(CVPR 2021)

paper&#xff1a;Coordinate Attention for Efficient Mobile Network Design official implementation&#xff1a;GitHub - houqb/CoordAttention: Code for our CVPR2021 paper coordinate attention 背景 注意力机制&#xff0c;已经被广泛用于提高深度神经网络的性能&…

HBuilder发行微信小程序

首先需要完善mainifest.json中的基本配置 这个需要组测dcloud才可以获取&#xff0c;注册后点击重新获取就可以。 然后发行前还需要完成dcloud的信息&#xff0c;这个他会给你网址 点击连接完成信息填写就可以了 然后就可以发行了。 发行成功后会自动跳转微信小程序&#xff…