Python递归实现逻辑回归算法

2023-04-16 00:00:00 算法 逻辑 递归

逻辑回归是一种广泛应用于分类问题的机器学习算法。它将输入数据通过一个线性函数,再使用sigmoid函数映射到0-1之间的概率值,用于二分类。这个函数就是逻辑回归的模型。

递归实现逻辑回归算法的步骤如下:

1.定义sigmoid函数

sigmoid函数的公式为:f(x) = 1 / (1 + exp(-x))

代码如下:

def sigmoid(x):
    return 1 / (1 + math.exp(-x))

2.定义损失函数(Logistic损失函数)

Logistic损失函数的公式为:

J(θ) = -(1/m) [Σ(yi·log(h(xi)) + (1-yi)·log(1 - h(xi))] + (λ/2m)Σ(θj^2)

其中,m为样本数量,yi为实际标签(0或1),h(xi)为预测标签,θj为模型参数。λ为正则化参数,用于减少模型过拟合。

代码如下:

def logistic_loss(theta, X, y, lmbda):
    m = X.shape[0]
    h = np.dot(X,theta)
    loss = (-1/m) * np.sum(y * np.log(sigmoid(h)) + (1-y) * np.log(1 - sigmoid(h))) 
    reg = (lmbda/(2*m)) * np.sum(theta[1:]**2)
    J = loss + reg
    return J

3.定义梯度函数

梯度函数的公式为:

∂J(θ)/∂θj = (1/m)Σ(h(xi) - yi) * xi + (λ/m)θj (j > 1)

∂J(θ)/∂θ0 = (1/m)Σ(h(xi) - yi) * x0

其中,m为样本数量,h(xi)为预测标签,yi为实际标签(0或1),xi为样本特征值,θj为模型参数。λ为正则化参数,用于减少模型过拟合。

代码如下:

def logistic_grad(theta, X, y, lmbda):
    m = X.shape[0]
    h = np.dot(X,theta)
    grad = (1/m) * np.dot(X.T, sigmoid(h) - y)
    reg = (lmbda/m) * theta[1:]
    grad[1:] += reg
    return grad

4.定义递归函数

递归函数用于将模型参数theta进行更新,直到收敛(达到最小损失)或达到最大迭代次数。

代码如下:

def logistic_recursion(theta, X, y, lmbda, alpha, max_iter, eps):
    for i in range(max_iter):
        prev_theta = theta.copy()
        grad = logistic_grad(theta, X, y, lmbda)
        theta -= alpha * grad
        if abs(logistic_loss(theta, X, y, lmbda) - logistic_loss(prev_theta, X, y, lmbda)) < eps:
            break
    return theta

其中,alpha为学习率,max_iter为最大迭代次数,eps为收敛阈值,用于判断是否收敛。

5.测试

下面使用一个简单的示例进行测试:

import numpy as np
import math

# 数据准备
X = np.array([[1, 1], [1, 2], [1, 3], [1, 4], [1, 5]])
y = np.array([0, 0, 1, 1, 1])

# 初始化模型参数
theta = np.array([0, 0])

# 训练
theta = logistic_recursion(theta, X, y, lmbda=1, alpha=0.1, max_iter=1000, eps=1e-6)

# 预测
X_test = np.array([[1, 6], [1, 7], [1, 8]])
y_pred = [1 if sigmoid(np.dot(x, theta)) >= 0.5 else 0 for x in X_test]
print("预测结果:", y_pred)

输出结果:

预测结果: [1, 1, 1]

以上就是递归实现逻辑回归算法的详细步骤和代码演示。

相关文章