同学们您好,如果您点击了此链接,那么您可能选择了正确的文章来了解更多有关对数损失的信息:)。在本文中,我们将讨论二元交叉熵的工作原理,并提供一个简单的代码示例来演示其用法。但在讨论之前,让我们更多地了解二元分类一词的确切含义。
什么是二元分类?
二元分类是一种监督学习问题,其目标是将实例分类到两个可能的类别之一。让我们尝试通过一个经典的垃圾邮件检测示例来理解这一点。这里的任务是预测电子邮件是否是垃圾邮件。
为了解决这个问题,我们可以使用逻辑回归等机器学习算法,它可以学习数据中的模式以做出准确的预测。我们可以在带标签的电子邮件数据集上训练模型,其中每封电子邮件都由一组特征表示,例如发件人、主题、正文等。
然后,该模型可用于根据新电子邮件的特征来预测其为垃圾邮件的概率。预测概率可以是 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_train
和y_train
,以及验证数据X_val
和y_val
。和参数控制训练时期的数量以及训练期间使用的小批量的大小epochs
。batch_size
结论
在本文中,我们讨论了二进制交叉熵的工作原理,并使用 Keras 库在 Python 中提供了一个简单的代码示例。该示例演示了如何使用binary_crossentropy()
该指标来训练二元分类模型并评估其性能accuracy
。