Python实现逻辑回归损失函数梯度计算与梯度下降算法
import numpy as np
"""
log_loss_dloss函数
计算逻辑回归损失函数的梯度
参数:
X - 数据(n_samples*n_features), numpy matrix类型
y - 标签(n_samples*1), numpy matrix类型
w - 权重(n_features*1), numpy matrix类型
返回值:
- 梯度(n_features*1), numpy matrix类型
"""
def log_loss_dloss(X, y, w):
# 计算预测值
z = X @ w
predictions = 1 / (1 + np.exp(-z))
# 计算梯度
error = predictions - y
gradient = X.T @ error / len(X)
return gradient
"""
gradient_descent函数
批量梯度下降算法
参数:
X - 数据(n_samples*n_features), numpy array类型
y - 标签(n_samples的一维数组), numpy array类型
max_iter - 最大迭代次数, default=1000
alpha - 学习率, default=0.001
返回值:
- 权重数组, numpy array类型
"""
def gradient_descent(X, y, max_iter=1000, alpha=0.001):
# 添加偏置项
X = np.hstack((np.ones((X.shape[0], 1)), X))
# 初始化权重
w = np.zeros((X.shape[1], 1))
# 迭代更新权重
for _ in range(max_iter):
# 计算梯度
gradient = log_loss_dloss(X, y, w)
# 更新权重
w = w - alpha * gradient
return w.getA().ravel().reshape(1, -1) # 将矩阵转换为数组,返回权重数组
# 示例数据
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([0, 0, 1, 1])
# 使用梯度下降算法训练模型
print(gradient_descent(X, y))
原文地址: https://www.cveoy.top/t/topic/rXq 著作权归作者所有。请勿转载和采集!