Logistic回归与Softmax回归:梯度下降法的公式推导与代码实现
2024.02.16 09:10浏览量:107简介:本文将介绍Logistic回归和Softmax回归的基本概念,以及如何使用梯度下降法进行优化。我们将通过数学公式推导和Python代码实现来阐述这一过程。
千帆应用开发平台“智能体Pro”全新上线 限时免费体验
面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用
Logistic回归和Softmax回归是机器学习中常用的分类算法。它们都是基于概率的二分类或多分类模型。在本文中,我们将重点介绍这两种模型的梯度下降法实现。
一、Logistic回归
Logistic回归是一种用于解决二分类问题的概率模型。给定输入特征向量x,Logistic回归的预测函数为:
p(y=1|x) = sigmoid(wx + b)
其中,sigmoid函数是一个将输入映射到(0,1)区间的非线性函数,w和b分别是模型参数,需要通过训练数据来学习。
梯度下降法是用于优化模型参数的一种常用方法。对于Logistic回归,损失函数(也称为成本函数或目标函数)通常采用交叉熵损失,梯度下降法的迭代公式为:
θ = θ - α (1/m) ∑(y - p(y=1|x)) * x
其中,α是学习率,m是训练样本数,p(y=1|x)是模型的预测概率。
二、Softmax回归
Softmax回归是多分类问题的概率模型。给定输入特征向量x,Softmax回归的预测函数为:
p(y=i|x) = exp(wx_i + b_i) / ∑_j(exp(wx_j + b_j))
其中,w_i和b_i分别是对应类别i的模型参数,∑_j表示对所有类别的求和。
同样地,Softmax回归也采用交叉熵损失作为损失函数,梯度下降法的迭代公式为:
θ = θ - α (1/m) ∑((y - p(y|x)) * x
其中,y是真实标签,p(y|x)是模型的预测概率。
三、代码实现
下面我们使用Python来实现Logistic回归和Softmax回归的梯度下降法。这里我们使用NumPy库来进行矩阵运算。
首先,我们需要定义sigmoid函数和交叉熵损失函数:
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
def cross_entropy_loss(y, p):
return -np.sum(y * np.log(p) + (1 - y) * np.log(1 - p))
接下来,我们实现Logistic回归的梯度下降法:
def logistic_regression(X, y, num_iters, learning_rate):
m = len(y) # 训练样本数
theta = np.zeros((X.shape[1], 1)) # 初始化模型参数
J_history = [] # 存储损失函数的值
for i in range(num_iters):
h = sigmoid(np.dot(X, theta)) # 计算预测概率
loss = cross_entropy_loss(y, h) # 计算损失值
J_history.append(loss) # 将损失值存储在历史记录中
gradient = (1 / m) * np.dot(X.T, (h - y)) # 计算梯度值
theta -= learning_rate * gradient # 更新模型参数
return theta, J_history
最后,我们实现Softmax回归的梯度下降法:
```python
def softmax_regression(X, y, num_iters, learning_rate):
m = len(y) # 训练样本数
num_classes = len(np.unique(y)) # 类别数
theta = np.zeros((num_classes, X.shape[1])) # 初始化模型参数矩阵,每一行对应一个类别参数向量
J_history = [] # 存储损失函数的值
for i in range(num_iters):
h = np.zeros((m, num_classes)) # 初始化预测概率矩阵,每一行对应一个样本的概率向量
for j in range(num_classes):
h[:, j] = np.exp(np.dot(X, theta[j])) / np.exp(np

发表评论
登录后可评论,请前往 登录 或 注册