机器学习中的代价函数

摘要:本文介绍了机器学习中常用的代价函数及其应用。分类任务主要使用二元交叉熵(二分类)和类别交叉熵(多分类)函数,回归任务常用均方误差和平均绝对误差。文章详细解释了二元交叉熵函数的数学定义、特性及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 时表示模型预测完全准确。

相关推荐
chatexcel2 小时前
元空AI+Clawdbot:7×24 AI办公智能体新形态详解(长期上下文/自动化任务/工具粘合)
运维·人工智能·自动化
Li emily3 小时前
如何通过外汇API平台快速实现实时数据接入?
开发语言·python·api·fastapi·美股
bylander3 小时前
【AI学习】TM Forum《Autonomous Networks Implementation Guide》快速理解
人工智能·学习·智能体·自动驾驶网络
m0_561359673 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
Ulyanov3 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲
Techblog of HaoWANG3 小时前
目标检测与跟踪 (8)- 机器人视觉窄带线激光缝隙检测系统开发
人工智能·opencv·目标检测·机器人·视觉检测·控制
laplace01233 小时前
Claude Skills 笔记整理
人工智能·笔记·agent·rag·skills
2501_941418553 小时前
【计算机视觉】基于YOLO11-P6的保龄球检测与识别系统
人工智能·计算机视觉
码农三叔3 小时前
(8-3)传感器系统与信息获取:多传感器同步与传输
人工智能·机器人·人形机器人