机器学习中的代价函数

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

相关推荐
火山引擎开发者社区27 分钟前
DeepSeek-V4.1-Flash 新版本登陆火山方舟,效果无损“经济版”八折上线
人工智能
HA-ming32 分钟前
PCSwitch 智能呼叫系统技术拆解:AI 机器人、意图识别与模块化流程如何串起业务自动化
人工智能·机器人·自动化·智能呼叫系统·智能呼叫中心·智能外呼·可视化模块化
微帧Visionular1 小时前
AI视频反复抽卡太贵,哪些问题可以用后处理修复?
人工智能·音视频
X54先生(人文科技)1 小时前
社会嵌入式终身学习机器与修复时代-ELR架构和技术演化探讨
人工智能·深度学习·学习·架构·开源协议
Elcker1 小时前
YnuoAgent(依诺):一个 npm 包,跑起属于自己的 AI 研发平台
前端·人工智能·npm
2601_965619691 小时前
让开源项目「会说话」:AI自动生成语音讲解+演示
人工智能·开源
residual_fan1 小时前
船用柴油机动态机动工况故障诊断:控制感知仿射网络(CAAN)的技术实现
人工智能·算法·数据挖掘·数据分析
爱上纯净的蓝天2 小时前
不用云做 RAG:一个本地笔记问答工具的取舍与坑
python·开源·大模型·rag·本地部署
珠海西格电力2 小时前
零碳园区管理系统的性能评估体系的行业标准
大数据·网络·人工智能·物联网·机器学习·架构·能源
wangruofeng2 小时前
黑色十月:AI 找到的漏洞,两小时数十万次利用
人工智能·安全·php