简介
逻辑回归是一种二分类算法,损失函数和代价函数和线性回归模型不同。目标是根据特征预测标签Y(0或1)。模型通过参数W和B拟合数据,但如何选择最优参数成为关键。本质上说线性回归的损失函数是对数值本身的误差平均值描述,而逻辑回归的损失函数是对概率的误差平均值描述。
逻辑回归概念复习
为了便于思考,这里重新复述一下逻辑回归的概念,加深记忆。
逻辑回归用于解决二分类问题,其目标是根据输入特征预测样本属于某个类别的概率。对于一个样本 ,逻辑回归模型通过逻辑函数(也称为Sigmoid函数)将线性组合
转换为概率值:
其中,是权重向量,
是偏置项。
模型的输出
表示样本 属于正类的概率。
损失函数
损失函数用于衡量单个样本的预测值与真实值之间的差异。在逻辑回归中,常用的损失函数是对数损失函数(Log Loss),也称为交叉熵损失函数(Cross-Entropy Loss)。
对于单个样本 ,其中
是真实标签,
是模型的预测概率,对数损失函数定义如下:
- 当 时,损失函数为
。这意味着如果模型预测为正类的概率
接近 1,损失就会很小;如果
接近 0,损失就会很大。
- 当时,损失函数为
。同样,如果模型预测为负类的概率
接近 1,损失就会很小;如果
接近 0,损失就会很大。
可以将这两种情况合并为一个表达式:
代价函数
代价函数是所有样本的损失函数的平均值,用于衡量整个训练集上模型的性能。
- 非凸性:若直接沿用线性回归的平方误差代价函数,逻辑回归的代价函数会呈现非凸形态,导致梯度下降易陷入局部极小值。
- 图示说明:当模型输出F(x)(逻辑函数值)与真实标签差异较大时,平方误差的曲面会出现多个局部最小值,无法保证全局最优解。
给出解决方案
对于包含 个样本的训练集
,逻辑回归的代价函数
定义为:
其中,
是第 个样本的预测概率。
损失函数和代价函数的特点
- 凸性:逻辑回归的代价函数是凸函数,这意味着它只有一个全局最小值,没有局部最小值。因此,可以使用梯度下降等优化算法来找到全局最优解。
- 单调性:对数损失函数具有单调性,即预测值与真实值之间的差异越大,损失函数的值就越大。这使得模型在训练过程中能够朝着减小损失的方向进行优化。
- 概率解释:对数损失函数可以从最大似然估计的角度进行解释。通过最大化训练数据的似然函数,可以得到最小化对数损失函数的结果。
Python 代码示例
以下是一个非常简单的使用 Python 和 NumPy 实现逻辑回归损失函数和代价函数的示例:
import numpy as npdef sigmoid(z):"""计算 Sigmoid 函数"""return 1 / (1 + np.exp(-z))def log_loss(y_true, y_pred):"""计算单个样本的对数损失函数"""return -y_true * np.log(y_pred) - (1 - y_true) * np.log(1 - y_pred)def cost_function(X, y, w, b):"""计算逻辑回归的代价函数"""m = X.shape[0]z = np.dot(X, w) + by_pred = sigmoid(z)cost = (1 / m) * np.sum(log_loss(y, y_pred))return cost# 示例数据
X = np.array([[1, 2], [3, 4], [5, 6]])
y = np.array([0, 1, 1])
w = np.array([0.1, 0.2])
b = 0.3# 计算代价函数
cost = cost_function(X, y, w, b)
print("Cost:", cost)
在这个示例中,我们首先定义了 Sigmoid 函数、对数损失函数和代价函数,然后使用示例数据计算了代价函数的值。
通过最小化代价函数,可以找到最优的权重向量 w 和偏置项 b,从而得到一个简单的的逻辑回归模型。
总结概括
- 数学简洁性:避免了分段讨论,便于代码实现。将两种分类情况统一为单一表达式,降低了实现复杂度。
- 凸性保证:代价函数为凸函数,梯度下降可收敛到全局最优解。确保了梯度下降的有效性,避免局部极小值问题。
- 统计依据:该代价函数基于最大似然估计推导,符合统计学原理。
- 后续将结合梯度下降算法,进一步优化逻辑回归模型的参数。