【机器学习】机器学习的基本分类-监督学习-逻辑回归-对数似然损失函数(Log-Likelihood Loss Function)

对数似然损失函数(Log-Likelihood Loss Function)

对数似然损失函数是机器学习和统计学中广泛使用的一种损失函数,特别是在分类问题(例如逻辑回归、神经网络)中应用最为广泛。它基于最大似然估计原理,通过最小化负对数似然(negative log-likelihood, NLL)来优化模型参数。


1. 对数似然损失的定义

对于一个分类问题,我们的目标是预测输入 x 属于类别 y∈{0,1} 的概率。假设模型输出的概率为 P(y=1|x) = \hat{y}​,则:

对数似然函数

似然函数衡量模型参数在观察到数据下的概率。假设数据集为 \{(x_i, y_i)\}_{i=1}^N​,样本 i 的预测概率为 \hat{y}_i,其似然函数为:

L(\theta) = \prod_{i=1}^N P(y_i | x_i; \theta)

对数似然函数

对数化简乘积:

\ell(\theta) = \log L(\theta) = \sum_{i=1}^N \log P(y_i | x_i; \theta)


 

2. 损失函数形式

为了简化计算,优化通常使用负对数似然损失函数(即最大化对数似然的对立面):

\mathcal{L}(\theta) = -\ell(\theta) = -\sum_{i=1}^N \log P(y_i | x_i; \theta)

二分类问题

对二分类问题,假设 P(y=1|x) = \hat{y}​,P(y=0|x) = 1 - \hat{y}​,则:

P(y|x) = \hat{y}^y (1 - \hat{y})^{1-y}

对数化并取负得到:

\mathcal{L}(\theta) = -\sum_{i=1}^N \left[ y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i) \right]

这就是交叉熵损失函数的形式,广泛用于二分类问题。


3. 推导直观理解

1. 对数似然的意义

对数似然量化了模型预测的质量:

  • y_i = 1:我们希望预测概率 \hat{y}_i​ 越大越好。
  • y_i = 0:我们希望预测概率 1 - \hat{y}_i​ 越大越好。

通过最大化对数似然(或最小化负对数似然),模型会调整参数使其预测概率最接近真实概率。

2. 为什么对数?

  • 简化计算:对数化后,将乘积变为求和,优化更加高效。
  • 凸性:对数函数的特性使得损失函数在很多情况下是凸的,便于求解全局最优解。

4. 多分类问题

对于多分类问题(如 softmax 分类器),假设类别标签为 y∈{1,2,…,K}y,模型预测类别 j 的概率为 \hat{y}_j = P(y=j|x)

似然函数

P(y|x) = \prod_{j=1}^K \hat{y}_j^{\mathbb{1}(y=j)}

其中 {1}(y=j)是指示函数,表示样本 y 是否属于类别 j。

对数化

\ell(\theta) = \log P(y|x) = \sum_{j=1}^K \mathbb{1}(y=j) \log \hat{y}_j

负对数似然损失

对于整个数据集:

\mathcal{L}(\theta) = -\frac{1}{N} \sum_{i=1}^N \log \hat{y}_{i,y_i}

其中,\hat{y}_{i,y_i}​​ 是样本 i 对真实类别 y_i 的预测概率。


5. 代码实现

以下是二分类和多分类对数似然损失的 Python 实现:

1. 二分类损失

import numpy as np

def binary_log_likelihood_loss(y_true, y_pred):
    """
    计算二元对数似然损失函数。

    参数:
    y_true: 真实标签数组,包含0和1,表示负类和正类。
    y_pred: 预测标签数组,包含0到1之间的浮点数,表示属于正类的概率。

    返回:
    返回二元对数似然损失函数的负均值。
    """
    # 避免数值问题
    y_pred = np.clip(y_pred, 1e-10, 1 - 1e-10)
    # 计算并返回二元对数似然损失
    return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))

# 示例
y_true = np.array([1, 0, 1, 1, 0])
y_pred = np.array([0.9, 0.1, 0.8, 0.7, 0.3])
# 计算损失并输出
loss = binary_log_likelihood_loss(y_true, y_pred)
print("Binary Log-Likelihood Loss:", loss)

输出结果

Binary Log-Likelihood Loss: 0.22944289410146546

2. 多分类损失

from sklearn.metrics import log_loss

# 示例数据
# 实际的类别标签
y_true = [0, 2, 1, 2]
# 预测的类别概率,每个子列表代表一个样本预测为各个类别的概率
y_pred = [
    [0.9, 0.05, 0.05],
    [0.1, 0.1, 0.8],
    [0.2, 0.7, 0.1],
    [0.05, 0.1, 0.85]
]

# 使用 sklearn 计算对数似然损失
# 该函数计算的是模型预测的类别概率与实际类别标签之间的对数似然损失
# 对于多分类问题,该损失函数可以衡量模型预测概率与真实标签之间的差异程度
loss = log_loss(y_true, y_pred)
print("Multi-class Log-Likelihood Loss:", loss)

输出结果

Multi-class Log-Likelihood Loss: 0.2119244851021358

6. 对数似然损失的应用

  1. 逻辑回归
    • 二分类逻辑回归中,使用对数似然损失来拟合模型参数。
  2. 神经网络
    • 输出层通常采用 softmax 函数并结合对数似然损失,用于多分类任务。
  3. 最大熵模型
    • 最大化熵等价于最小化负对数似然。

7. 优点与缺点

优点

  • 对概率建模有理论支撑,直观解释预测置信度。
  • 能有效捕捉预测概率的质量。

缺点

  • 对异常值敏感:错误分类的高置信预测会导致损失剧增。
  • 数值问题:log⁡(0) 会引发计算错误,需引入数值稳定策略。

对数似然损失函数连接了统计学中的最大似然估计与机器学习中的损失优化,是现代监督学习模型的理论基石之一!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL基础入门 —— SQL概述

目录 1. 什么是SQL及其应用场景 SQL的应用场景 2. SQL数据库与NoSQL数据库的区别 2.1 数据模型 2.2 查询语言 2.3 扩展性 2.4 一致性与事务 2.5 使用场景 2.6 性能与扩展性 总结 3. 常见的SQL数据库管理系统(MySQL, PostgreSQL, SQLite等) 3.…

力扣--LCR 149.彩灯装饰记录I

题目 代码 /** Definition for a binary tree node. public class TreeNode { int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left left;this.right ri…

Admin.NET框架使用宝塔面板部署步骤

文章目录 Admin.NET框架使用宝塔面板部署步骤🎁框架介绍部署步骤1.Centos7 部署宝塔面板2.部署Admin.NET后端3.部署前端Web4.访问前端页面 Admin.NET框架使用宝塔面板部署步骤 🎁框架介绍 Admin.NET 是基于 .NET6 (Furion/SqlSugar) 实现的通用权限开发…

软通动力携子公司鸿湖万联、软通教育助阵首届鸿蒙生态大会成功举办

11月23日中国深圳,首届鸿蒙生态大会上,软通动力及软通动力子公司鸿湖万联作为全球智慧物联网联盟(GIIC)理事单位、鸿蒙生态服务(深圳)有限公司战略合作伙伴,联合软通教育深度参与了大会多项重磅…

利用若依代码生成器实现课程管理模块开发

目录 前言1. 环境准备1.1 数据库表设计与导入 2. 使用若依代码生成器生成模块代码2.1 导入数据库表2.2 配置生成规则2.2.1 基本信息配置2.2.2 字段信息配置2.2.3 生成信息配置 3. 下载与集成生成代码3.1 解压与集成3.2 启动项目并验证 4. 优化与扩展4.1 前端优化4.2 后端扩展 结…

MySQL Linux 离线安装

下载 进入官网,下载对应的需要MySQL版本,这里是历史版本。 官网 选择第一个MySQL Community Sever社区版,因为这个是免费的。 选择需要的对应版本: 安装 1.将下载好的安装包上传到服务器端 使用FinalShell 客户端连接服务器 …

Milvus 2.5:全文检索上线,标量过滤提速,易用性再突破!

01. 概览 我们很高兴为大家带来 Milvus 2.5 最新版本的介绍。 在 Milvus 2.5 里,最重要的一个更新是我们带来了“全新”的全文检索能力,之所以说“全新”主要是基于以下两点: 第一,对于全文检索基于的 BM25 算法,我们采…

think php处理 异步 url 请求 记录

1、需求 某网站 需要 AI生成音乐,生成mp3文件的时候需要等待,需要程序中实时监听mp3文件是否生成 2、用的开发框架 为php 3、文件结构 配置路由设置 Route::group(/music, function () {Route::post(/musicLyrics, AiMusic/musicLyrics);//Ai生成歌词流式…

27 基于51单片机的方向盘模拟系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,采用两个MPX4115压力传感器作为两路压力到位开关电路, 采用滑动变阻器连接数模转换器模拟重力加速度传感器电路; 一个按键控制LED灯的点亮与…

【亚马逊云科技】使用Amazon Lightsail搭建nginx服务

文章目录 前言一、为什么选择Amazon Lightsail二、创建账号与登录注册亚马逊账号登录控制台 三、创建Amazon Lightsail进入控制台创建实例登录服务器部署nginx服务关闭防火墙 总结 前言 不论是个人名片还是官方网站都离不开网站建设工作。计算机技术经历漫长的发展&#xff0c…

YOLOv8实战无人机视角目标检测

本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对无人机目标数据集进行训练和优化,该数据集包含丰富的无人机目标图像…

Java设计模式——职责链模式:解锁高效灵活的请求处理之道

嘿,各位 Java 编程大神和爱好者们!今天咱们要一同深入探索一种超厉害的设计模式——职责链模式。它就像一条神奇的“处理链”,能让请求在多个对象之间有条不紊地传递,直到找到最合适的“处理者”。准备好跟我一起揭开它神秘的面纱…

【四轴】利用PWM捕获解析接收机信号

在学习这部分之间,建议大家先看之前这篇博客,里面包含对PWM一些重要概念的基本介绍。 【四轴】利用PWM输出驱动无刷电机-CSDN博客 1. 基本原理 1.1 PWM是什么 这一部分可以看我之前的博客,已经对PWM有了基本的介绍。 1.2 什么叫捕获PWM波&…

HTTP 1

文章目录 1.2个简单的预备知识域名统一资源定位符 URL完整的URL 2. http请求和响应 格式画出来,两个工具见一见http请求/响应的样子3. 写一个最简单的httpserver,用浏览器直接测试recvsend处理请求stringstream 字符串分割工具wget 4. 读http报文的细节 …

【mac】mac自动定时开关机和其他常用命令,管理电源设置的工具pmset

一、操作步骤 1、打开终端 2、pmset 是用于管理电源设置的强大工具,我们将使用这个命令 (1)查询当前任务 pmset -g sched查看到我当前的设置是 唤醒电源开启在 工作日的每天早上8点半 上班时不用手动开机了 (2)删…

瀚高创库建表pgsql

1.瀚高下载地址: 下载 (highgo.com)https://www.highgo.com/down_main.html 2.瀚高linux安装 上传deb文件到ubuntu系统中 执行 dpkg -i hgdb-see-4.5.8-fe4791c.x86_64.deb 命令安装数据库 安装完成后,会在/opt 目录下生成安装目录 数据库安装完毕后…

力扣--LCR 150.彩灯装饰记录II

题目 代码 if(root null){ return new ArrayList<>(); } Queue<TreeNode> queue new LinkedList<>();List<List<Integer>> res new ArrayList<>();queue.add(root);while(!queue.isEmpty()){int k queue.size();List<Integer> …

ubuntu24.04安装Kubernetes1.31.0(k8s1.30.0)高可用集群

ubuntu24.04安装Kubernetes1.30.0(kubernetes1.30.0)高可用集群 一、总体概览 目前最新版的K8S版本应该是1.31.0,我们安装的是第二新的版本1.30.0,因为有大神XiaoHH Superme指路,所以基本上没踩坑,很顺利就搭建完成了。所有的机器都采用的最新版Ubuntu-Server-24.04长期支…

由于导包而引发的错误

今天在调试时发现删除功能无论如何都无法实现&#xff0c;于是调试找到了mapper层的错误但不知道为什么报错。以下是报错信息。 Caused by: org.apache.ibatis.binding.BindingException: Parameter userIds not found. Available parameters are [arg0, collection, list]at o…

结构体,枚举,联合知识点笔记总结

结构体&#xff1a; 1.之前我们知道&#xff0c;数组&#xff1a;一些值的结合&#xff0c;类型是相同的 结构&#xff1a;是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量 struct s {int a; --|-->结构体成员int b; --}; 注意…