Python递归实现逻辑回归算法
逻辑回归是一种广泛应用于分类问题的机器学习算法。它将输入数据通过一个线性函数,再使用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]
以上就是递归实现逻辑回归算法的详细步骤和代码演示。
相关文章