赞
踩
逻辑回归是一种广泛用于分类问题的统计方法,特别是在二分类问题中应用最为普遍。它是监督学习的一种形式,适合于估计离散值(如是/否)之间的关系。
左图是我们的回归问题,输出的是连续数值,右图则是我们的分类问题。
逻辑回归的目标是找到一个概率模型,预测给定输入变量的输出类别。虽然名为“回归”,但逻辑回归实际上是一种分类方法。
核心思想是使用逻辑函数(或称sigmoid函数)将线性回归模型的输出值映射到0和1之间,这个映射后的值表示某个类别发生的概率。逻辑函数的公式为:
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+e−z1
其中( z )是输入特征的线性组合,形式为:
z = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n z = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n z=β0+β1x1+β2x2+⋯+βnxn
逻辑回归通常使用最大似然估计(MLE)来确定参数 β \beta β系数)。最大似然估计的目的是找到使得观测到的样本数据出现概率最大的参数。在逻辑回归中,这等同于找到一个参数集合,使得模型预测的概率与实际数据匹配得最好。
在逻辑回归中,我们使用对数损失(Log Loss),也称为二元交叉熵损失(二分类问题)。这个损失函数用于衡量模型预测概率与实际标签之间的差异。
对于一个二分类问题,逻辑回归模型输出的是一个概率 p ^ \hat{p} p^(即属于类别1的概率)。假设我们有 N N N 个样本,模型的预测概率为 p ^ i \hat{p}_i p^i,真实标签为 y i y_i yi(取值为0或1),则逻辑回归的损失函数(对数损失)定义为:
L = − 1 N ∑ i = 1 N [ y i log ( p ^ i ) + ( 1 − y i ) log ( 1 − p ^ i ) ] L = -\frac{1}{N} \sum_{i=1}^N \left[ y_i \log(\hat{p}_i) + (1 - y_i) \log(1 - \hat{p}_i) \right] L=−N1∑i=1N[yilog(p^i)+(1−yi)log(1−p^i)]
预测概率:
逻辑回归模型通过逻辑函数(sigmoid函数)将线性组合的输入特征
z
=
β
0
+
β
1
x
1
+
β
2
x
2
+
⋯
+
β
n
x
n
z = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n
z=β0+β1x1+β2x2+⋯+βnxn 转化为概率:
p ^ = σ ( z ) = 1 1 + e − z \hat{p} = \sigma(z) = \frac{1}{1 + e^{-z}} p^=σ(z)=1+e−z1
对数似然函数:
为了估计参数
β
\beta
β,我们最大化似然函数(样本标签与模型预测概率的联合概率),但是为了简化计算,我们通常最小化负对数似然函数。负对数似然函数的公式为:
−
log
L
(
β
)
=
−
∑
i
=
1
N
[
y
i
log
(
p
^
i
)
+
(
1
−
y
i
)
log
(
1
−
p
^
i
)
]
-\log L(\beta) = - \sum_{i=1}^N \left[ y_i \log(\hat{p}_i) + (1 - y_i) \log(1 - \hat{p}_i) \right]
−logL(β)=−∑i=1N[yilog(p^i)+(1−yi)log(1−p^i)]
在逻辑回归中,对数似然函数前面加负号是为了将最大化问题转换为最小化问题。这是因为在许多优化算法中,尤其是梯度下降法,通常处理的是最小化问题。
似然函数:
逻辑回归模型的参数估计基于最大似然估计(MLE)。最大似然估计的目标是找到使得观测数据出现概率最大的参数。对于给定的数据集,其似然函数(Likelihood)表示为:
L
(
β
)
=
∏
i
=
1
N
p
^
i
y
i
(
1
−
p
^
i
)
1
−
y
i
L(\beta) = \prod_{i=1}^N \hat{p}_i^{y_i} (1 - \hat{p}_i)^{1 - y_i}
L(β)=i=1∏Np^iyi(1−p^i)1−yi
其中, p ^ i = σ ( z i ) \hat{p}_i = \sigma(z_i) p^i=σ(zi) 是第 i i i 个样本属于类别1的概率, y i y_i yi 是实际标签。
对数似然函数:
由于直接处理似然函数不太方便,我们取其对数,得到对数似然函数(Log-Likelihood):
log
L
(
β
)
=
∑
i
=
1
N
[
y
i
log
(
p
^
i
)
+
(
1
−
y
i
)
log
(
1
−
p
^
i
)
]
\log L(\beta) = \sum_{i=1}^N [y_i \log(\hat{p}_i) + (1 - y_i) \log(1 - \hat{p}_i)]
logL(β)=i=1∑N[yilog(p^i)+(1−yi)log(1−p^i)]
对数似然函数在数学上更容易处理,因为它将乘积转换为和,使得计算和优化更加简便。
负对数似然函数:
许多优化算法,特别是梯度下降法,通常是用于最小化问题而非最大化问题。为了适应这种优化框架,我们取对数似然函数的负值:
− log L ( β ) = − ∑ i = 1 N [ y i log ( p ^ i ) + ( 1 − y i ) log ( 1 − p ^ i ) ] -\log L(\beta) = -\sum_{i=1}^N [y_i \log(\hat{p}_i) + (1 - y_i) \log(1 - \hat{p}_i)] −logL(β)=−i=1∑N[yilog(p^i)+(1−yi)log(1−p^i)]
这样,原本的最大化对数似然函数的问题就转换为最小化负对数似然函数的问题。
损失函数:
最终,我们得到的损失函数(对数损失或二元交叉熵损失)为:
L = − 1 N ∑ i = 1 N [ y i log ( p ^ i ) + ( 1 − y i ) log ( 1 − p ^ i ) ] L = -\frac{1}{N} \sum_{i=1}^N [y_i \log(\hat{p}_i) + (1 - y_i) \log(1 - \hat{p}_i)] L=−N1i=1∑N[yilog(p^i)+(1−yi)log(1−p^i)]
这个损失函数衡量的是模型预测概率与实际标签之间的差异,负对数似然函数值越小,模型的预测就越准确。
在逻辑回归中,对数似然函数前面加负号的主要目的是为了将最大化问题转化为最小化问题,这样我们可以使用标准的优化算法(如梯度下降)来训练模型。最小化负对数似然函数即等同于最大化对数似然函数,从而找到最佳的模型参数。
平均损失:
为了便于处理和解释,我们通常使用平均损失函数,即对负对数似然函数取平均:
L = − 1 N ∑ i = 1 N [ y i log ( p ^ i ) + ( 1 − y i ) log ( 1 − p ^ i ) ] L = -\frac{1}{N} \sum_{i=1}^N \left[ y_i \log(\hat{p}_i) + (1 - y_i) \log(1 - \hat{p}_i) \right] L=−N1∑i=1N[yilog(p^i)+(1−yi)log(1−p^i)]
逻辑回归的损失函数是凸函数,这意味着它只有一个全局最小值。我们通常使用梯度下降法来最小化这个损失函数,以找到最优的参数 β \beta β。
梯度下降的基本步骤如下:
初始化参数 β \beta β。
计算损失函数的梯度。
更新参数 β \beta β:
β : = β − α ⋅ ∇ β L \beta := \beta - \alpha \cdot \nabla_\beta L β:=β−α⋅∇βL
其中, α \alpha α是学习率, ∇ β L \nabla_\beta L ∇βL 是损失函数对参数 β \beta β的梯度。
通过反复执行这些步骤,模型的参数会逐渐逼近最优值,从而使损失函数达到最小。
在训练逻辑回归模型时,通常使用梯度下降法来最小化损失函数,损失函数通常是对数损失(也称为逻辑损失),公式为:
L = − 1 N ∑ i = 1 N [ y i log ( p ^ i ) + ( 1 − y i ) log ( 1 − p ^ i ) ] L = -\frac{1}{N} \sum_{i=1}^N [y_i \log(\hat{p}_i) + (1 - y_i) \log(1 - \hat{p}_i)] L=−N1∑i=1N[yilog(p^i)+(1−yi)log(1−p^i)]
这里, y i y_i yi是第i个样本的实际类别标签, p ^ i \hat{p}_i p^i是模型预测的概率。
import numpy as np # 定义Sigmoid函数 def sigmoid(z): return 1 / (1 + np.exp(-z)) # 定义损失函数 def compute_cost(X, y, theta): m = len(y) h = sigmoid(X.dot(theta)) epsilon = 1e-5 # 避免log(0) cost = -(1/m) * (y.T.dot(np.log(h + epsilon)) + (1 - y).T.dot(np.log(1 - h + epsilon))) return cost # 梯度下降函数 def gradient_descent(X, y, theta, learning_rate, num_iters): m = len(y) cost_history = [] for i in range(num_iters): h = sigmoid(X.dot(theta)) gradient = (1/m) * X.T.dot(h - y) theta -= learning_rate * gradient cost = compute_cost(X, y, theta) cost_history.append(cost) return theta, cost_history # 生成示例数据 np.random.seed(0) X = np.random.rand(100, 2) y = (X[:, 0] + X[:, 1] > 1).astype(int) X = np.hstack((np.ones((X.shape[0], 1)), X)) # 添加偏置项 # 初始化参数 theta = np.zeros(X.shape[1]) learning_rate = 0.1 num_iters = 1000 # 训练模型 theta, cost_history = gradient_descent(X, y, theta, learning_rate, num_iters) # 预测函数 def predict(X, theta): return sigmoid(X.dot(theta)) >= 0.5 # 进行预测 y_pred = predict(X, theta) # 评估模型 accuracy = np.mean(y_pred == y) print("Accuracy:", accuracy)
优点:
缺点:
逻辑回归在医学(疾病诊断)、金融(信用评分)、广告点击率预测等多个领域中有广泛应用。尽管深度学习在许多复杂问题上表现更优,但逻辑回归仍然是许多简单问题的首选,特别是当解释性比复杂性更重要时。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。