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))
Python实现逻辑回归损失函数梯度计算与梯度下降算法

原文地址: https://www.cveoy.top/t/topic/rXq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录