吴恩达机器学习笔记复盘(十一)逻辑回归的代价和损失函数

简介

逻辑回归是一种二分类算法,损失函数和代价函数和线性回归模型不同。目标是根据特征预测标签Y(0或1)。模型通过参数W和B拟合数据,但如何选择最优参数成为关键。本质上说线性回归的损失函数是对数值本身的误差平均值描述,而逻辑回归的损失函数是对概率的误差平均值描述。

逻辑回归概念复习

为了便于思考,这里重新复述一下逻辑回归的概念,加深记忆。

逻辑回归用于解决二分类问题,其目标是根据输入特征预测样本属于某个类别的概率。对于一个样本 x,逻辑回归模型通过逻辑函数(也称为Sigmoid函数)将线性组合

z = w^T x + b

转换为概率值:

\sigma(z) = \frac{1}{1 + e^{-z}}

其中,w是权重向量,b是偏置项。

模型的输出

\hat{y} = \sigma(w^T x + b)

表示样本 x属于正类的概率。

损失函数

损失函数用于衡量单个样本的预测值与真实值之间的差异。在逻辑回归中,常用的损失函数是对数损失函数(Log Loss),也称为交叉熵损失函数(Cross-Entropy Loss)。

对于单个样本 (x, y),其中 y \in \{0, 1\} 是真实标签,\hat{y}是模型的预测概率,对数损失函数定义如下:

- 当 y = 1 时,损失函数为 -\log(\hat{y})。这意味着如果模型预测为正类的概率 \hat{y} 接近 1,损失就会很小;如果 \hat{y}接近 0,损失就会很大。

- 当y = 0时,损失函数为 -\log(1 - \hat{y})。同样,如果模型预测为负类的概率 1 - \hat{y}接近 1,损失就会很小;如果1 - \hat{y} 接近 0,损失就会很大。

可以将这两种情况合并为一个表达式: L(\hat{y}, y) = -y \log(\hat{y}) - (1 - y) \log(1 - \hat{y})

代价函数

代价函数是所有样本的损失函数的平均值,用于衡量整个训练集上模型的性能。

 - 非凸性:若直接沿用线性回归的平方误差代价函数,逻辑回归的代价函数会呈现非凸形态,导致梯度下降易陷入局部极小值。

- 图示说明:当模型输出F(x)(逻辑函数值)与真实标签差异较大时,平方误差的曲面会出现多个局部最小值,无法保证全局最优解。

给出解决方案

对于包含 m个样本的训练集\{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), \cdots, (x^{(m)}, y^{(m)})\},逻辑回归的代价函数 J(w, b)定义为:

J(w, b) = \frac{1}{m} \sum_{i = 1}^{m} \left[ -y^{(i)} \log(\hat{y}^{(i)}) - (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right]

其中,

\hat{y}^{(i)} = \sigma(w^T x^{(i)} + b)

是第 i个样本的预测概率。

损失函数和代价函数的特点

- 凸性:逻辑回归的代价函数是凸函数,这意味着它只有一个全局最小值,没有局部最小值。因此,可以使用梯度下降等优化算法来找到全局最优解。

- 单调性:对数损失函数具有单调性,即预测值与真实值之间的差异越大,损失函数的值就越大。这使得模型在训练过程中能够朝着减小损失的方向进行优化。

- 概率解释:对数损失函数可以从最大似然估计的角度进行解释。通过最大化训练数据的似然函数,可以得到最小化对数损失函数的结果。

 Python 代码示例

以下是一个非常简单的使用 Python 和 NumPy 实现逻辑回归损失函数和代价函数的示例:

import numpy as npdef sigmoid(z):"""计算 Sigmoid 函数"""return 1 / (1 + np.exp(-z))def log_loss(y_true, y_pred):"""计算单个样本的对数损失函数"""return -y_true * np.log(y_pred) - (1 - y_true) * np.log(1 - y_pred)def cost_function(X, y, w, b):"""计算逻辑回归的代价函数"""m = X.shape[0]z = np.dot(X, w) + by_pred = sigmoid(z)cost = (1 / m) * np.sum(log_loss(y, y_pred))return cost# 示例数据
X = np.array([[1, 2], [3, 4], [5, 6]])
y = np.array([0, 1, 1])
w = np.array([0.1, 0.2])
b = 0.3# 计算代价函数
cost = cost_function(X, y, w, b)
print("Cost:", cost)

在这个示例中,我们首先定义了 Sigmoid 函数、对数损失函数和代价函数,然后使用示例数据计算了代价函数的值。

通过最小化代价函数,可以找到最优的权重向量 w 和偏置项 b,从而得到一个简单的的逻辑回归模型。

总结概括

  • 数学简洁性:避免了分段讨论,便于代码实现。将两种分类情况统一为单一表达式,降低了实现复杂度。
  • 凸性保证:代价函数为凸函数,梯度下降可收敛到全局最优解。确保了梯度下降的有效性,避免局部极小值问题。
  • 统计依据:该代价函数基于最大似然估计推导,符合统计学原理。
  • 后续将结合梯度下降算法,进一步优化逻辑回归模型的参数。

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

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

相关文章

ctfshow WEB web3

提示是一道php伪协议文件包含的题目&#xff0c;通过get传递的参数是 url 使用 Burp 抓包&#xff0c;发送给 Repeater 构造php伪协议&#xff0c;通过url传递 ?urlphp://input <?php system("pwd");?> 查看当前目录 <?php system("ls");?…

Windows部署deepseek R1训练数据后通过AnythingLLM当服务器创建问答页面

如果要了解Windows部署Ollama 、deepseek R1请看我上一篇内容。 这是接上一篇的。 AnythingLLM是一个开源的全栈AI客户端&#xff0c;支持本地部署和API集成。它可以将任何文档或内容转化为上下文&#xff0c;供各种语言模型&#xff08;LLM&#xff09;在对话中使用。以下是…

word中指定页面开始添加页码

第一步&#xff1a; 插入页码 第二步&#xff1a; 把光标放到指定起始页码处 第三步&#xff1a; 取消链接到前一节 此时关掉页脚先添加分节符 添加完分节符后恢复点击 第四步&#xff1a; 设置页码格式&#xff0c;从1开始 第五步&#xff1a; 删掉不要的页码&#xff0c…

多语言语料库万卷·丝路2.0开源,数据模态全面升级,搭建文化交流互鉴AI桥梁

3月22日&#xff0c;上海人工智能实验室&#xff08;上海AI实验室&#xff09;联合新华社新闻信息中心、上海外国语大学、外研在线等&#xff0c;发布全新升级的“万卷丝路2.0”多语言语料库&#xff0c;通过构建多语言开源数据底座&#xff0c;以人工智能赋能“一带一路”高质…

Windows桌面采集技术

在进入具体的方式讨论前&#xff0c;我们先看看 Windows 桌面图形界面的简化架构&#xff0c;如下图&#xff1a; 在 Windows Vista 之前&#xff0c;Windows 界面的复合画面经由 Graphics Device Interface&#xff08;以下简称 GDI&#xff09;技术直接渲染到桌面上。 在 Wi…

C# BULK INSERT导入大数据文件数据到SqlServer

BULK INSERT 的核心原理 BULK INSERT 是一种通过数据库原生接口高效批量导入数据的技术&#xff0c;其核心原理是绕过逐条插入的 SQL 解析和执行开销&#xff0c;直接将数据以二进制流或批量记录的形式传输到数据库。 在.NET中&#xff0c;主要通过 ​SqlBulkCopy 类​&#x…

Power BI嵌入应用:常见问题与调试技巧

将Power B 嵌入应用时的常见问题与调试技巧 Power BI Embedded 是一项 Microsoft Azure 服务&#xff0c;允许开发人员将交互式 Power BI 报表和仪表板嵌入到外部自定义应用程序或网站中。将Power BI嵌入应用程序能有效提升用户体验&#xff0c;但实施过程中可能面临一些典型问…

Android Studio编译问题

文章目录 GradleJDK版本不兼容 Gradle JDK版本不兼容 Incompatible because this component declares an API of a component compatible with Java 11 and the consumer needed a runtime of a component compatible with Java 8 查看module内gradle文件是否设置jdk版本&…

Four.meme是什么,一篇文章读懂

一、什么是Four.meme&#xff1f; Four.meme 是一个运行在 BNB 链的去中心化平台旨在为 meme 代币供公平启动服务。它允许用户以极低的成本创建和推出 meme 代币&#xff0c;无需预售或团队分配&#xff0c;它消除了传统的预售、种子轮和团队分配&#xff0c;确保所有参与者有…

解决PHP内存溢出问题的讨论和分析

PHP作为一种广泛使用的服务器端脚本语言&#xff0c;在处理大量数据或复杂任务时&#xff0c;常常会遇到内存溢出的问题。内存溢出不仅会导致程序崩溃&#xff0c;还可能影响服务器的稳定性。本文将探讨解决PHP内存溢出问题的最佳实践&#xff0c;并通过代码示例进行详细说明。…

git,openpnp - 根据安装程序打包名称找到对应的源码版本

文章目录 git,openpnp - 根据安装程序打包名称找到对应的源码版本概述笔记备注 - 提交时间不可以作为查找提交记录的依据END git,openpnp - 根据安装程序打包名称找到对应的源码版本 概述 想在openpnp官方最新稳定版上改一改&#xff0c;首先就得知道官方打包的安装程序对应的…

基于Spring Boot的停车场管理系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

基于Spring Boot + Vue的银行管理系统设计与实现

基于Spring Boot Vue的银行管理系统设计与实现 一、引言 随着金融数字化进程加速&#xff0c;传统银行业务向线上化转型成为必然趋势。本文设计并实现了一套基于Spring Boot Vue的银行管理系统&#xff0c;通过模块化架构满足用户、银行职员、管理员三类角色的核心业务需求…

Unity | Tag、Layer常量类生成工具

在项目开发中我们可以对诸如Layer、Tag等编辑器数据进行常量生成&#xff0c;来代替在代码中通过输入字符串生成常量的形式以提高开发效率。 Layer的生成可以通过LayerMask.LayerToName获取层名称&#xff08;也可以从TagManager.asset中获得 &#xff09;&#xff0c;Tag的生成…

两个手机都用流量,IP地址会一样吗?深入解析

在日常生活中&#xff0c;我们常常会同时使用多台手机设备上网&#xff0c;尤其是在流量充足的情况下。你是否曾好奇过&#xff0c;当两台手机同时使用流量上网时&#xff0c;它们的IP地址会是一样的吗&#xff1f;这个问题看似简单&#xff0c;却涉及移动网络的技术原理。本文…

后端——AOP异步日志

需求分析 在SpringBoot系统中&#xff0c;一般会对访问系统的请求做日志记录的需求&#xff0c;确保系统的安全维护以及查看接口的调用情况&#xff0c;可以使用AOP对controller层的接口进行增强&#xff0c;作日志记录。日志保存在数据库当中&#xff0c;为了避免影响接口的响…

Qt的内存管理机制

在Qt中&#xff0c;显式使用new创建的对象通常不需要显式调用delete来释放内存&#xff0c;这是因为Qt提供了一种基于对象树(Object Tree)和父子关系(Parent-Child Relationship)的内存管理机制。这种机制可以自动管理对象的生命周期&#xff0c;确保在适当的时候释放内存&…

React:React主流组件库对比

1、Material-UI | 官网 | GitHub | GitHub Star: 94.8k Material-UI 是一个实现了 Google Material Design 规范的 React 组件库。 Material UI 包含了大量预构建的 Material Design 组件&#xff0c;覆盖导航、滑块、下拉菜单等各种常用组件&#xff0c;并都提供了高度的可定制…

排序算法(插入,希尔,选择,冒泡,堆,快排,归并)

1.插入排序 插入排序的主要思想是额外申请一个空间cur&#xff0c;让cur一开始等于数组的第1号位置,设置i1&#xff0c;让i-1的元素与其比较&#xff0c;如果arr[i-1]>arr[i]&#xff0c;就让arr[i1] arr[i]&#xff0c;当进行到最后一次对比结束&#xff0c;i-1,再让arr[…

python学习笔记--实现简单的爬虫(二)

任务&#xff1a;爬取B站上最爱欢迎的编程课程 网址&#xff1a;编程-哔哩哔哩_bilibili 打开网页的代码模块&#xff0c;如下图&#xff1a; 标题均位于class_"bili-video-card__info--tit"的h3标签中&#xff0c;下面通过代码来实现&#xff0c;需要说明的是URL中…