机器学习中的代价函数

摘要:本文介绍了机器学习中常用的代价函数及其应用。分类任务主要使用二元交叉熵(二分类)和类别交叉熵(多分类)函数,回归任务常用均方误差和平均绝对误差。文章详细解释了二元交叉熵函数的数学定义、特性及Python实现方法,并通过鸢尾花数据集示例展示了如何用scikit-learn训练逻辑回归模型并计算损失值。代价函数的选择直接影响模型优化效果,理解其原理对机器学习实践具有重要意义。

目录

机器学习中的代价函数

分类问题的代价函数

[1. 二元交叉熵损失](#1. 二元交叉熵损失)

[2. 类别交叉熵损失](#2. 类别交叉熵损失)

回归问题的代价函数

[1. 均方误差(MSE)](#1. 均方误差(MSE))

[2. 平均绝对误差(MAE)](#2. 平均绝对误差(MAE))

[二元交叉熵损失的 Python 实现](#二元交叉熵损失的 Python 实现)

示例

示例说明

输出结果


机器学习中的代价函数

在机器学习中,代价函数是衡量机器学习模型性能表现的一种指标。它是一个数学函数,输入模型的预测值和数据的真实值,输出一个单一的标量值,该标量值代表模型预测结果的代价或误差。训练机器学习模型的目标就是最小化代价函数。

代价函数的选择取决于要解决的具体问题。例如,在二分类任务中(目标是预测数据点属于两个类别中的某一个),最常用的代价函数是二元交叉熵函数;在回归任务中(目标是预测一个连续值),则常用均方误差函数。

分类问题的代价函数

分类问题属于监督式机器学习任务。监督式学习模型的目标是找到能最小化代价函数的最优参数值。分类问题可分为二分类和多分类两类:二分类问题最常用的代价函数是二元交叉熵函数,多分类问题最常用的是类别交叉熵函数。

1. 二元交叉熵损失

下面详细介绍二元交叉熵函数。假设有一个二分类问题,包含类别 0 和类别 1,用p(y=1|x)表示模型预测样本属于类别 1 的概率,每个数据点的真实标签要么是 0,要么是 1。二元交叉熵代价函数的定义如下:

  • 单个样本:

  • 整个数据集:

其中,n是数据点的数量,yᵢ是第i个数据点的真实标签,pᵢ是对应的模型预测该数据点属于类别 1 的概率。

二元交叉熵函数具有多个理想特性:

  1. 它是凸函数,这意味着存在唯一的全局最小值,可通过优化技术找到;
  2. 它是严格正函数,即会对错误预测进行惩罚;
  3. 它是可微函数,因此可用于基于梯度的优化算法。

2. 类别交叉熵损失

类别交叉熵损失适用于图像分类等多分类问题,用于衡量每个类别的预测概率分布与真实分布之间的差异。

回归问题的代价函数

回归问题的代价函数用于计算真实值与模型预测值之间的差异,有多种误差可作为代价函数,最常用的是平均绝对误差(MAE)和均方误差(MSE)。

1. 均方误差(MSE)

均方误差衡量预测值与真实值之间的平均平方差。

2. 平均绝对误差(MAE)

平均绝对误差衡量预测值与真实值之间的平均绝对差,相比 MSE,它对异常值的敏感度更低。

二元交叉熵损失的 Python 实现

下面展示如何使用 NumPy 在 Python 中实现二元交叉熵函数:

python 复制代码
import numpy as np

def binary_cross_entropy(y_pred, y_true):
    eps = 1e-15
    y_pred = np.clip(y_pred, eps, 1 - eps)
    return -(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)).mean()

在该实现中,首先对预测概率进行裁剪(clip),以避免对数运算出现数值问题,然后使用 NumPy 函数计算二元交叉熵损失,并返回所有数据点的平均值。

定义好代价函数后,可通过梯度下降等优化技术训练机器学习模型。优化的目标是找到能最小化代价函数的一组模型参数。

示例

以下示例展示如何使用二元交叉熵函数,通过 scikit-learn 库在鸢尾花(Iris)数据集上训练逻辑回归模型:

python 复制代码
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# 加载鸢尾花数据集
iris = load_iris()

# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)

# 训练逻辑回归模型
logreg = LogisticRegression()
logreg.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = logreg.predict(X_test)

# 计算二元交叉熵损失
loss = binary_cross_entropy(logreg.predict_proba(X_test)[:, 1], y_test)
print('损失值:', loss)

示例说明

  1. 首先使用 scikit-learn 的load_iris函数加载鸢尾花数据集;
  2. 利用train_test_split函数将数据划分为训练集和测试集;
  3. 使用 scikit-learn 的LogisticRegression类在训练集上训练逻辑回归模型;
  4. 调用训练好的模型的predict方法在测试集上进行预测;
  5. 为计算二元交叉熵损失,使用逻辑回归模型的predict_proba方法获取测试集中每个数据点属于类别 1 的预测概率,通过索引提取类别 1 的概率,与测试集的真实标签一起传入binary_cross_entropy函数,计算并输出损失值。

输出结果

运行上述代码后,将得到以下输出:

plaintext

复制代码
损失值: 1.6312339784720309

二元交叉熵损失值反映了逻辑回归模型对测试集中每个数据点类别的预测效果:损失值越低,模型性能越好;损失值为 0 时表示模型预测完全准确。

相关推荐
孙启超1 小时前
【大模型应用开发】LLM 到底是什么,以及它是怎么训练的
人工智能·lora·llm·微调·sft·token·rlhf
新知图书2 小时前
7.1 需求分析与规划 《AI Agent智能体开发实践》
人工智能·agent·ai agent·智能体
青 春 记 忆2 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
clorinda2 小时前
机器学习文本分类入门:从数据清洗到中文评论词向量转换
人工智能
小宋10212 小时前
Dify 知识库实战:从 PDF 导入到带引用回答,完整搭建企业问答助手
人工智能·ai编程
Python私教2 小时前
多个项目怎么安全合并?先适配,再切换
后端·python·架构
用户938515635073 小时前
从Vibe Coding到SDD:规范驱动开发如何拯救AI编程失控
人工智能
蓝速科技3 小时前
蓝速科技桌面 AI 双屏翻译机:开放安卓系统商用价值解析
人工智能·科技
博、、4 小时前
社区家政平台开发实战指南:从需求分析到系统部署全流程解析
人工智能·数据挖掘·需求分析
Python私教4 小时前
别急着加 llms.txt:企业官网面向 AI 搜索的工程清单
前端·人工智能·seo