逻辑回归中的损失函数是什么,为什么使用这个函数

逻辑回归中的损失函数是什么?为什么使用这个函数?

逻辑回归是一种二分类算法,用于预测某个样本属于某一类的概率。为了进行模型训练,我们需要定义一个合适的损失函数来衡量预测值和真实值之间的差异。在逻辑回归中,常用的损失函数是二元交叉熵损失函数(Binary Cross Entropy Loss)。

这个损失函数被广泛应用于逻辑回归领域,原因有两点:
1. 逻辑回归旨在将线性函数输出映射到概率值,且概率值应该在0到1之间。而交叉熵损失函数是一个非负函数,当预测值和真实值越接近时,损失越小,模型拟合得越好。同时,交叉熵损失只需要考虑预测值所属类别的概率,而不需要知道其他类别的概率。
2. 在数学推导中,交叉熵损失函数的梯度相对容易计算,利于使用梯度下降等优化算法进行模型参数的更新。

下面将详细介绍逻辑回归中的损失函数、推导过程以及使用Python来计算和展示的步骤。

算法原理

逻辑回归是一种广义线性模型,它通过对输入变量进行线性组合,并通过一个激活函数(即逻辑函数)将线性输出转化为概率。

逻辑函数常用的一种形式是sigmoid函数,其表达式为:
$$\sigma(z) = \frac{1}{1+e^{-z}}$$
其中,$z=w^Tx$是由输入变量$x$和权重向量$w$形成的线性组合的结果。

sigmoid函数的取值范围在0到1之间,因此可以将其解释为样本属于某个类别的概率。

损失函数推导

在逻辑回归中,我们将使用最大似然估计来推导损失函数。假设我们有$m$个训练样本$(x^{(i)}, y^{(i)})$,其中,$y^{(i)}$表示样本的真实标签,如果$y^{(i)}=1$,则表示样本属于正例,如果$y^{(i)}=0$,则表示样本属于反例。样本属于正例的概率可以表示为:
$$p(y^{(i)}=1 | x^{(i)}) = h_{w}(x^{(i)})$$
其中,$h_{w}(x^{(i)})$表示逻辑回归模型的预测值。由于样本的真实标签只能取1和0两个值,那么样本属于反例的概率可以表示为:
$$p(y^{(i)}=0 | x^{(i)}) = 1 – h_{w}(x^{(i)})$$

我们可以将这两种情况合并为一个公式:
$$p(y^{(i)} | x^{(i)}) = (h_{w}(x^{(i)}))^{y^{(i)}} (1 – h_{w}(x^{(i)}))^{1 – y^{(i)}}$$

为了找到最合适的模型参数$w$,我们需要最大化样本数据集的联合概率,即所有样本属于正例和反例的概率的乘积。这等价于最小化对数似然损失函数:
$$\begin{align}
J(w) &= – \frac{1}{m} \sum_{i=1}^{m} [y^{(i)} \log(h_{w}(x^{(i)})) + (1 – y^{(i)}) \log(1 – h_{w}(x^{(i)}))]
\end{align
}$$

通过这个损失函数,我们可以评估模型的预测结果与真实标签之间的差异。当预测结果与真实标签完全一致时,损失函数取得最小值为0。

计算步骤

要使用逻辑回归算法进行模型训练,需要进行以下步骤:

  1. 准备训练数据:包括输入特征$x$和对应的真实标签$y$。
  2. 初始化模型参数:包括权重向量$w$和偏置项$b$。
  3. 定义逻辑函数和损失函数。
  4. 使用优化算法(如梯度下降)进行模型训练,通过迭代更新模型参数,使损失函数最小化。
  5. 根据模型参数和输入特征进行预测。

Python代码示例

import numpy as np
import matplotlib.pyplot as plt

# 定义sigmoid函数
def sigmoid(z):
 return 1 / (1 + np.exp(-z))

# 定义逻辑回归模型
def logistic_regression(X, y, num_iterations, learning_rate):
 m, n = X.shape
 W = np.zeros((n, 1))
 b = 0
 costs = []

 for i in range(num_iterations):
 # 计算模型预测值
 Z = np.dot(X, W) + b
 A = sigmoid(Z)

 # 计算损失函数
 cost = -np.sum(y artical cgpt2md_gpt.sh cgpt2md_johngo.log cgpt2md_johngo.sh cgpt2md.sh _content1.txt _content.txt current_url.txt history_url history_urls log nohup.out online pic.txt seo test.py topic_gpt.txt topic_johngo.txt topic.txt upload-markdown-to-wordpress.py urls np.log(A) + (1 - y) artical cgpt2md_gpt.sh cgpt2md_johngo.log cgpt2md_johngo.sh cgpt2md.sh _content1.txt _content.txt current_url.txt history_url history_urls log nohup.out online pic.txt seo test.py topic_gpt.txt topic_johngo.txt topic.txt upload-markdown-to-wordpress.py urls np.log(1 - A)) / m
 costs.append(cost)

 # 计算梯度
 dZ = A - y
 dW = np.dot(X.T, dZ) / m
 db = np.sum(dZ) / m

 # 更新参数
 W -= learning_rate artical cgpt2md_gpt.sh cgpt2md_johngo.log cgpt2md_johngo.sh cgpt2md.sh _content1.txt _content.txt current_url.txt history_url history_urls log nohup.out online pic.txt seo test.py topic_gpt.txt topic_johngo.txt topic.txt upload-markdown-to-wordpress.py urls dW
 b -= learning_rate artical cgpt2md_gpt.sh cgpt2md_johngo.log cgpt2md_johngo.sh cgpt2md.sh _content1.txt _content.txt current_url.txt history_url history_urls log nohup.out online pic.txt seo test.py topic_gpt.txt topic_johngo.txt topic.txt upload-markdown-to-wordpress.py urls db

 return W, b, costs

# 生成虚拟数据集
np.random.seed(0)
num_samples = 100
X = np.random.randn(num_samples, 2)
y = np.random.randint(0, 2, (num_samples, 1))

# 添加偏置列
X_with_bias = np.hstack((np.ones((num_samples, 1)), X))

# 调用逻辑回归算法
W, b, costs = logistic_regression(X_with_bias, y, num_iterations=1000, learning_rate=0.01)

# 绘制损失函数变化曲线
plt.plot(costs)
plt.xlabel('Iterations')
plt.ylabel('Cost')
plt.title('Cost function')
plt.show()

代码解释:
– 首先,我们导入必要的库,包括NumPy(用于数值计算)和Matplotlib(用于可视化)。
– 然后,我们定义了sigmoid函数,用于逻辑函数的计算。
– 接下来,我们定义了一个logistic_regression函数,用于实现逻辑回归模型的训练。该函数接受输入特征X、真实标签y、迭代次数num_iterations和学习率learning_rate作为参数。
– 在logistic_regression函数内部,我们首先初始化模型参数W和b,并创建一个空列表costs用于存储每次迭代后的损失值。
– 然后,我们通过迭代计算模型的预测值A、损失函数cost、梯度dW和db,并更新参数W和b。
– 最后,我们返回更新后的参数W和b以及损失函数值的列表costs。
– 在主程序中,我们生成了一个虚拟数据集,然后调用logistic_regression函数进行模型训练,并绘制了损失函数的变化曲线。

通过运行以上代码,我们可以得到逻辑回归模型的参数和损失函数的变化曲线,从而评估模型的训练效果。

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/821756/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球