【机器学习】成本函数在逻辑回归中的形式以及逻辑回归的成本函数

news2024/11/15 13:29:48

引言

在机器学习中,逻辑回归是一种用于二分类问题的线性回归的扩展。逻辑回归的成本函数是用来评估模型预测结果与实际结果之间差异的函数

文章目录

  • 引言
  • 一、成本函数在逻辑回归中的形式
    • 1.1 成本函数的具体形式
      • 1.1.1 对于单个训练样本
  • 二、逻辑回归的成本函数实现
    • 2.1 导入第三方库
    • 2.2 数据集
    • 2.3 成本函数
    • 2.4 代码描述
    • 2.5 示例
    • 2.6 总结

一、成本函数在逻辑回归中的形式

逻辑回归的成本函数是交叉熵损失(Cross-Entropy Loss)的一种形式,它由两部分组成:正例的损失和负例的损失

1.1 成本函数的具体形式

1.1.1 对于单个训练样本

损失(loss)函数定义为:
loss ( y , y ^ ) = − y log ⁡ ( y ^ ) − ( 1 − y ) log ⁡ ( 1 − y ^ ) \text{loss}(y, \hat{y}) = -y \log(\hat{y}) - (1 - y) \log(1 - \hat{y}) loss(y,y^)=ylog(y^)(1y)log(1y^)
其中:

  • y y y是真实的标签值,取值为 0 或 1。
  • y ^ \hat{y} y^是模型预测的概率,即 y ^ = P ( y = 1 ∣ x ; θ ) \hat{y} = P(y = 1 | x; \theta) y^=P(y=1∣x;θ),这是通过逻辑函数(logistic function)计算得出的。

逻辑函数(也称为sigmoid函数)定义为:
y ^ = σ ( z ) = 1 1 + e − z \hat{y} = \sigma(z) = \frac{1}{1 + e^{-z}} y^=σ(z)=1+ez1
其中:

  • z z z是线性回归的输出,即 z = θ T x + b z = \theta^T x + b z=θTx+b θ \theta θ是权重参数, b b b是偏置项

将上述损失函数应用于整个训练集,得到成本函数(Cost Function)
J ( θ ) = 1 m ∑ i = 1 m loss ( y ( i ) , y ^ ( i ) ) J(\theta) = \frac{1}{m} \sum_{i=1}^{m} \text{loss}(y^{(i)}, \hat{y}^{(i)}) J(θ)=m1i=1mloss(y(i),y^(i))
其中:

  • m m m是训练样本的数量, y ( i ) y^{(i)} y(i) y ^ ( i ) \hat{y}^{(i)} y^(i)分别是第 i i i个样本的真实标签和预测概率
  • 成本函数 J ( θ ) J(\theta) J(θ)的目的是通过最小化这个函数来找到最佳的参数 θ \theta θ,使得模型在训练数据上的预测误差最小
  • 在逻辑回归中,通常使用梯度下降(Gradient Descent)或其变体来最小化成本函数

二、逻辑回归的成本函数实现

2.1 导入第三方库

import numpy as np
%matplotlib widget
import matplotlib.pyplot as plt
from lab_utils_common import plot_data, sigmoid, dlc
plt.style.use('./deeplearning.mplstyle')

2.2 数据集

我们从决策边界实验中使用的数据集开始

X_train = np.array([[0.5, 1.5], [1,1], [1.5, 0.5], [3, 0.5], [2, 2], [1, 2.5]])  #(m,n)
y_train = np.array([0, 0, 0, 1, 1, 1])                                           #(m,)

我们将使用一个辅助函数来绘制这些数据。标签为𝑦=1的数据点用红色十字表示,而标签为𝑦=0的数据点用蓝色圆圈表示

fig,ax = plt.subplots(1,1,figsize=(4,4))
plot_data(X_train, y_train, ax)# 设置两个轴的范围为0-4
ax.axis([0, 4, 0, 3.5])
ax.set_ylabel('$x_1$', fontsize=12)
ax.set_xlabel('$x_0$', fontsize=12)
plt.show()

输出结果:
在这里插入图片描述

2.3 成本函数

在之前的实验中,开发了逻辑损失函数。回忆一下,损失是针对一个示例定义的。在这里,将组合损失以形成成本,其中包括所有示例。

对于逻辑回归,成本函数的形式为:
J ( w , b ) = 1 m ∑ i = 0 m − 1 [ l o s s ( f w , b ( x ( i ) ) , y ( i ) ) ] (1) J(\mathbf{w},b) = \frac{1}{m} \sum_{i=0}^{m-1} \left[ loss(f_{\mathbf{w},b}(\mathbf{x}^{(i)}), y^{(i)}) \right] \tag{1} J(w,b)=m1i=0m1[loss(fw,b(x(i)),y(i))](1)
其中:

l o s s ( f w , b ( x ( i ) ) , y ( i ) ) = − y ( i ) log ⁡ ( f w , b ( x ( i ) ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 − f w , b ( x ( i ) ) ) (2) loss(f_{\mathbf{w},b}(\mathbf{x}^{(i)}), y^{(i)}) = -y^{(i)} \log\left(f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) - \left( 1 - y^{(i)}\right) \log \left( 1 - f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) \tag{2} loss(fw,b(x(i)),y(i))=y(i)log(fw,b(x(i)))(1y(i))log(1fw,b(x(i)))(2)
其中m是数据集中的训练示例数量,且:
f w , b ( x ( i ) ) = g ( z ( i ) ) z ( i ) = w ⋅ x ( i ) + b g ( z ( i ) ) = 1 1 + e − z ( i ) \begin{align} f_{\mathbf{w},b}(\mathbf{x^{(i)}}) &= g(z^{(i)})\tag{3} \\ z^{(i)} &= \mathbf{w} \cdot \mathbf{x}^{(i)}+ b\tag{4} \\ g(z^{(i)}) &= \frac{1}{1+e^{-z^{(i)}}}\tag{5} \end{align} fw,b(x(i))z(i)g(z(i))=g(z(i))=wx(i)+b=1+ez(i)1(3)(4)(5)

2.4 代码描述

compute_cost_logistic算法遍历所有示例,计算每个示例的损失并求和

注意,变量X和y不是标量值,而是形状为(𝑚,𝑛)和(𝑚,)的矩阵,其中𝑛是特征数量,𝑚是训练示例的数量

def compute_cost_logistic(X, y, w, b):
    """
    计算成本
​
    参数:
      X (ndarray (m,n)): 数据,m个示例,每个示例有n个特征
      y (ndarray (m,)) : 目标值
      w (ndarray (n,)) : 模型参数  
      b (scalar)       : 模型参数
      
    返回:
      cost (scalar): 成本
    """
​
    m = X.shape[0]
    cost = 0.0
    for i in range(m):
        z_i = np.dot(X[i],w) + b
        f_wb_i = sigmoid(z_i)
        cost +=  -y[i]*np.log(f_wb_i) - (1-y[i])*np.log(1-f_wb_i)
             
    cost = cost / m
    return cost
​

使用下面的单元格检查成本函数的实现。

w_tmp = np.array([1,1])
b_tmp = -3
print(compute_cost_logistic(X_train, y_train, w_tmp, b_tmp))

预期输出:0.3668667864055175
输出结果:
在这里插入图片描述

2.5 示例

现在,让我们看看不同的𝑤值下成本函数的输出
在之前的实验中,绘制了𝑏=−3,𝑤0=1,𝑤1=1的决策边界。也就是说,使用了w = np.array([-3,1,1])
假设您想看看𝑏=−4,𝑤0=1,𝑤1=1,或者w = np.array([-4,1,1])是否提供了更好的模型。
首先,让我们为这两个不同的𝑏值绘制决策边界,看看哪个更适合数据。
对于𝑏=−3,𝑤0=1,𝑤1=1,我们将绘制−3+𝑥0+𝑥1=0(以蓝色显示)
对于𝑏=−4,𝑤0=1,𝑤1=1,我们将绘制−4+𝑥0+𝑥1=0(以品红色显示)

# 导入matplotlib库并绘图
import matplotlib.pyplot as plt
# 选择0到6之间的值
x0 = np.arange(0,6)
# 绘制两个决策边界
x1 = 3 - x0
x1_other = 4 - x0
fig,ax = plt.subplots(1, 1, figsize=(4,4))
# 绘制决策边界
ax.plot(x0,x1, c=dlc["dlblue"], label="$b$=-3")
ax.plot(x0,x1_other, c=dlc["dlmagenta"], label="$b$=-4")
ax.axis([0, 4, 0, 4])
# 绘制原始数据
plot_data(X_train,y_train,ax)
ax.axis([0, 4, 0, 4])
ax.set_ylabel('$x_1$', fontsize=12)
ax.set_xlabel('$x_0$', fontsize=12)
plt.legend(loc="upper right")
plt.title("决策边界")
plt.show()

输出结果:
在这里插入图片描述

从这张图中可以看出,w = np.array([-4,1,1])对于训练数据来说是一个更差的模型,让我们看看成本函数的实现是否反映了这一点

w_array1 = np.array([1,1])
b_1 = -3
w_array2 = np.array([1,1])
b_2 = -4
print("当b = -3时的成本: ", compute_cost_logistic(X_train, y_train, w_array1, b_1))
print("当b = -4时的成本: ", compute_cost_logistic(X_train, y_train, w_array2, b_2))

预期输出:
当b = -3时的成本: 0.3668667864055175
当b = -4时的成本: 0.5036808636748461
输出结果:
在这里插入图片描述

可以看到,成本函数的行为符合预期,w = np.array([-4,1,1])的成本确实高于w = np.array([-3,1,1])的成本

2.6 总结

  • 如图所示,检查并使用了逻辑回归的成本函数

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

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

相关文章

股指期货的期现套利及其作用是什么?

股指期货市场提供了一种独特的投资机会,即通过期现套利策略来捕捉无风险利润。这种策略基于股指期货与对应的现货指数之间的价格差异。当这种差异超出正常范围时,投资者可以利用套利操作来实现稳定收益。 期现套利的核心在于同时买入现货指数的代表性投…

STM32DMA数据传输

我估计大多数人学这么久连听说都没听说过DMA,更不用提知道它是干嘛的。其实DMA的本质就是一个数据的搬运工。平常的时候当我们没有配置的时候,一直都是CPU在搬运数据,但是这个活又累又没有技术含量,所以DMA的重要性还是有的。 目…

centos8.5.2111切换阿里云镜像

备份 mv /etc/yum.repos.d/CentOS-Linux-BaseOS.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo.backup下载最新的源 wget -O /etc/yum.repos.d/CentOS-Linux-BaseOS.repo http://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo更改第二个配置文件 cd /etc/yum.repo…

自定义CustomRatingBar控件

通过自定义RatingBar的样式实现⭐️⭐️⭐️指示器的方式功能过于受限,而且显示的样式阴影会受到影响。 系统自带显示: 自定义样式: 因此简单自一个符合要求的 CustomRatingBar 支持设置星星数量支持设置星星Rating(float)支持设置空显示…

计算机毕业设计选题推荐-健康饮食系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

【优秀python 数据分析案例】基于python的穷游网酒店数据采集与可视化分析的设计与实现

1 需求分析 1.1 用户需求 1.1.1 背景与现状 穷游网是国内知名的旅游社区,在其网站上,用户可以自由分享旅行经验和攻略,也可以浏览其他用户的经验和攻略,以便更好地规划自己的旅行。而酒店信息是旅行攻略中不可或缺的一部分&#…

正点原子imx6ull-mini-Linux驱动之设备树下的 platform 驱动编写(15)

上一章我们详细的讲解了 Linux 下的驱动分离与分层,以及总线、设备和驱动这样的驱动 框架。基于总线、设备和驱动这样的驱动框架,Linux 内核提出来 platform 这个虚拟总线,相应 的也有 platform 设备和 platform 驱动。上一章我们讲解了传统的…

vue2学习 -- 脚手架

文章目录 1. 使用2. render函数3. vue.config.js配置文件4. ref属性5. props配置6. mixin7. 插件8. scoped 1. 使用 脚手架文档 安装脚手架 npm install -g vue/cli 选择工作目录,创建项目 vue create name 2. render函数 关于不同版本的Vue.js vue.js与vue.run…

在 VueJS 项目中实现多个可拖拽的弹出框(多个可拖拽el-dialog弹出框,共用同一函数)

前言 在项目开发中,弹出框(Dialog)是常见的UI组件。默认情况下,弹出框的位置是固定的,但在某些场景下,我们希望用户可以自由拖动弹出框的位置,以提升用户体验。之前单个视频拖拽弹框&#xff0…

Spring Boot 参数校验 Validation 使用

概述 当我们想提供可靠的 API 接口,对参数的校验,以保证最终数据入库的正确性,是必不可少的活。前、后端校验都是保证参数的准确性的手段之一,前端校验并不安全,任何人都可以通过接口来调用我们的服务,就算…

springboot电影购票系统-计算机毕业设计源码85384

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…

ComfyUI插件:ComfyUI layer style 节点(三)

前言: 学习ComfyUI是一场持久战,而ComfyUI layer style 是一组专为图片设计制作且集成了Photoshop功能的强大节点。该节点几乎将PhotoShop的全部功能迁移到ComfyUI,诸如提供仿照Adobe Photoshop的图层样式、提供调整颜色功能(亮度…

哪里可以找到数据恢复软件?5 款顶级数据恢复软件分享

在当今的数字时代,我们的数据既是我们最宝贵的资产,也是我们最大的弱点。由于硬件故障、意外删除或软件问题,丢失重要文档、珍贵照片或对职业至关重要的项目的风险始终存在。值得庆幸的是,强大的数据恢复软件可以帮助找回最初看似…

[每周一更]-(第108期):如何保护你的JavaScript代码

文章目录 一、框架如何实现JS的保护1. 模块化和组件化2. 使用环境变量3. 代码混淆和最小化vue.config.js 4. 使用请求库和拦截器axios.js 文件在组件中使用 Axios 拦截器 5. 服务端处理敏感逻辑6. 安全最佳实践使用 CSP 7. 依赖前端框架的内置安全特性8. 数据验证和清理 二、原…

【linux】【操作系统】内核之traps.c源码阅读

C 文件traps.c 是 Linux 内核的一部分,主要处理硬件陷阱和故障。文件中包含多个函数来处理不同类型的异常和错误。下面是详细的解析: 概览 目的:此文件负责处理各种硬件异常和故障。它包括了处理特定类型错误以及初始化异常处理器的函数。文…

uniapp0基础编写安卓原生插件和调用第三方jar包(Ch34的jar包)和如何解决android 如何Application初始化

前言 我假设你会uniapp安卓插件开发了,如果不会请看这篇文章,这篇文章是0基础教学。 这篇文章我们将讲一下如何使用CH34XUARTDriver.jar进行开发成uniapp插件。 它的难点是:uniapp如何Application初始化第三方jar包 先去官网下载CH340/CH341的USB转串口安卓免驱应用库:h…

Spring实现自定义注解

一, 背景 目前部门有一个培训,需要讲一下Spring的使用,看到有同学提出问题,想自定义实现一个打日志的注解,下面就记录一下实现过程。 环境: Spring 6.1.5, 不使用Spring Boot. 二,实现步骤 …

Mysql--权限与安全管理

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、权限表 MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在MySQL数据库中,由MySQL_install_db脚本初始化。存储…

【工具篇】华为VRP通用操作系统 —— 配置文件管理

文章目录 配置文件分类配置文件命令配置文件工作原理 配置文件分类 设备的配置文件通常有两种类型: 1、启动配置文件(Startup Configuration): 这是设备启动时加载的配置文件,包含了设备的基本配置信息,如…

Linux 内核源码分析---资源分配及系统总线

资源管理 Linux提供通用的构架,用于在内存中构建数据结构。这些结构描述了系统中可用的资源,使得内核代码能够管理和分配资源。 其中关键的数据结构resource如下: 用于连接parent, child, sibling成员规则如下: 1、每个子结点只…