Machine Learning 简明教程

Machine Learning - Cost Function

在机器学习中,成本函数是一种衡量机器学习模型执行效果的指标。它是一个数学函数,它采用模型的预测值和数据的真实值,并输出一个标量值,表示模型预测的成本或错误。训练机器学习模型的目标是最小化成本函数。

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

让我们仔细看看二元交叉熵函数。给定一个具有两个类别的二元分类问题,我们称之为类 0 和类 1,我们将模型预测的类 1 概率表示为“p(y = 1 | x)”。每个数据点的真实标签是 0 或 1。我们可以将二元交叉熵成本函数定义如下−

J = -1 / m) × Σ(y × log(p) + (1 - y) × log(1 - p)

其中“m”是数据点的数量,“y”是每个数据点的真实标签,“p”是类 1 的预测概率。

二元交叉熵函数具有几个可取的属性。首先,它是一个凸函数,这意味着它具有一个唯一的全局最小值,可以使用优化技术找到该最小值。其次,它是一个严格的正函数,这意味着它会对错误的预测进行惩罚。第三,它是一个可微函数,这意味着它可以用基于梯度的优化算法。

Implementation in Python

现在让我们看看如何使用 NumPy 在 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()

在此实现中,我们先对预测的概率进行剪裁以避免对数的数字问题。然后,我们使用 NumPy 函数计算二进制交叉熵损失,并返回所有数据点的平均值。

一旦定义了成本函数,就可以使用梯度下降等优化技术来训练机器学习模型。优化的目标是找到使成本函数最小化的模型参数集。

Example

以下是如何使用二进制交叉熵函数在 Iris 数据集上使用 scikit-learn 训练逻辑回归模型的示例:

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# Load the Iris dataset
iris = load_iris()

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)

# Train a logistic regression model
logreg = LogisticRegression()
logreg.fit(X_train, y_train)

# Make predictions on the testing set
y_pred = logreg.predict(X_test)

# Compute the binary cross-entropy loss
loss = binary_cross_entropy(logreg.predict_proba(X_test)[:, 1], y_test)
print('Loss:', loss)

在上面的示例中,我们首先使用 scikit-learn 中的 load_iris 函数加载 Iris 数据集。然后,我们使用受训模型的 train_test _splitfunction. We train a logistic regression model on the training set using theLogisticRegressionclass from scikit-learn. We then make predictions on the testing set using thepredict 方法将数据分割为训练集和测试集。

要计算二进制交叉熵损失,我们使用逻辑回归模型的 predict_proba 方法来获取测试集中每个数据点的第 1 类预测概率。然后,我们使用索引提取第 1 类的概率,并将它们与测试集的真实标签一起传递给我们的 binary_cross_entropy 函数。该函数计算损失并返回它,我们将其显示在终端上。

执行此代码时,将生成以下输出 −

Loss: 1.6312339784720309

二进制交叉熵损失衡量的是逻辑回归模型在预测测试集中每个数据点的类别方面的表现。较低损失表示较好表现,0 的损失表示完美表现。