二元交叉熵损失函数

同学们您好,如果您点击了此链接,那么您可能选择了正确的文章来了解更多有关对数损失的信息:)。在本文中,我们将讨论二元交叉熵的工作原理,并提供一个简单的代码示例来演示其用法。但在讨论之前,让我们更多地了解二元分类一词的确切含义。

另请阅读:如何将数据帧写入二进制 Feather 格式?

什么是二元分类?

二元分类是一种监督学习问题,其目标是将实例分类到两个可能的类别之一。让我们尝试通过一个经典的垃圾邮件检测示例来理解这一点这里的任务是预测电子邮件是否是垃圾邮件。

为了解决这个问题,我们可以使用逻辑回归等机器学习算法,它可以学习数据中的模式以做出准确的预测。我们可以在带标签的电子邮件数据集上训练模型,其中每封电子邮件都由一组特征表示,例如发件人、主题、正文等。

然后,该模型可用于根据新电子邮件的特征来预测其为垃圾邮件的概率。预测概率可以是 0 到 1 之间的任意数字,我们可以将其解释为模型对其预测的置信度。然而,预测概率与真实标签不同,真实标签要么是 0,要么是 1。

为了评估二元分类模型的性能,我们需要一种方法来将预测概率与真实标签进行比较。这就是二元交叉熵损失的用武之地。既然您已经对这个问题产生了兴趣,那么您肯定需要了解二元交叉熵或对数损失。

什么是二元交叉熵?

二元交叉熵,也称为对数损失,是一种损失函数,用于衡量二元分类问题中预测概率与真实标签之间的差异。它常用于机器学习和深度学习算法中,以优化模型的性能。

让我们定义一些符号。令 y 为真实标签,为 0 或 1。令 p 为正类(类 1)的预测概率。负类(0 类)的预测概率仅为 1-p。二元交叉熵损失可以定义如下:

  • 如果 y = 1:-log(p)
  • 如果 y = 0:-log(1-p)

这个损失函数背后的直觉是,当模型做出自信的错误预测时,它会严重惩罚模型。例如,如果真实标签为1(意味着该实例属于正类),并且模型预测概率为0.1,则损失将非常高(-log(0.1) = 2.3)。另一方面,如果模型预测概率为 0.9,则损失会更低 (-log(0.9) = 0.1)。

二元交叉熵损失具有几个理想的特性,使其成为二元分类问题的良好选择。首先,它是一个平滑且连续的函数,这意味着它可以使用基于梯度的方法进行优化。其次,它是凸的,这意味着它具有唯一的全局最小值。第三,它经过良好校准,这意味着它可以很好地估计真实概率。

在 Python 中实现二元交叉熵损失

为了在Python中实现二元交叉熵,我们可以使用binary_crossentropy()Keras库中的函数。Keras 是一个流行的深度学习库,它提供了用于构建神经网络的高级接口。

下面是一个简单的代码示例,演示了如何binary_crossentropy()在二元分类问题中使用:

from keras.losses import binary_crossentropy
from keras.optimizers import Adam
from keras.models import Sequential
from keras.layers import Dense
 
# Create a binary classification model
model = Sequential()
model.add(Dense(16, input_dim=8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
 
# Compile the model
model.compile(loss=binary_crossentropy, optimizer=Adam(lr=0.001), metrics=['accuracy'])
 
# Train the model
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))

在此代码示例中,我们首先导入必要的库并使用 Keras Sequential API 创建一个简单的二元分类模型。该模型有两个密集层,第一个具有 16 个单元和ReLU 激活函数,第二个具有单个单元和sigmoid 激活函数

binary_crossentropy然后,我们使用损失函数和Adam优化器以 0.001 的学习率编译模型。我们还包括accuracy在训练期间评估模型性能的指标。

最后,我们使用该fit()函数训练模型并指定训练数据X_trainy_train,以及验证数据X_valy_val参数控制训练时期的数量以及训练期间使用的小批量的大小epochsbatch_size

结论

在本文中,我们讨论了二进制交叉熵的工作原理,并使用 Keras 库在 Python 中提供了一个简单的代码示例。该示例演示了如何使用binary_crossentropy()该指标来训练二元分类模型并评估其性能accuracy