使用CVXPY实现L1正则化逻辑回归的完整指南

使用CVXPY实现L1正则化逻辑回归的完整指南

cvxpy A Python-embedded modeling language for convex optimization problems. cvxpy 项目地址: https://gitcode.com/gh_mirrors/cv/cvxpy

逻辑回归是机器学习中最基础且广泛应用的分类算法之一。本文将详细介绍如何使用CVXPY这一强大的凸优化工具包来实现带有L1正则化的逻辑回归模型。

逻辑回归基础

逻辑回归是一种用于解决二分类问题的统计方法。给定特征向量x ∈ Rⁿ和对应的二元标签y ∈ {0,1},逻辑回归通过以下方式建模:

  1. 对数几率(log-odds)线性模型: log[Pr(Y=1|X=x)/Pr(Y=0|X=x)] = βᵀx

  2. 由此导出的概率表达式: Pr(Y=1|X=x) = exp(βᵀx)/(1+exp(βᵀx)) Pr(Y=0|X=x) = 1/(1+exp(βᵀx))

L1正则化的作用

L1正则化(也称为Lasso正则化)通过在目标函数中添加λ‖β‖₁项来实现:

  1. 促进稀疏解:许多系数βᵢ会被压缩为0
  2. 自动特征选择:非零系数对应的特征被视为重要特征
  3. 防止过拟合:特别适用于高维数据(特征数n大于样本数m的情况)

CVXPY实现详解

1. 数据生成

我们首先生成模拟数据,包含50个特征和50个训练样本:

np.random.seed(1)
n = 50  # 特征数
m = 50  # 训练样本数

# 真实参数(只有前3个非零)
beta_true = np.array([1, 0.5, -0.5] + [0]*(n - 3))  

# 生成特征矩阵
X = (np.random.random((m, n)) - 0.5)*10  

# 生成标签(加入噪声)
Y = np.round(sigmoid(X @ beta_true + np.random.randn(m)*0.5))

2. 构建优化问题

CVXPY的核心是定义变量、构建目标函数和约束:

beta = cp.Variable(n)  # 待优化的参数
lambd = cp.Parameter(nonneg=True)  # 正则化系数

# 对数似然函数
log_likelihood = cp.sum(
    cp.multiply(Y, X @ beta) - cp.logistic(X @ beta) 
)

# 构建问题:最大化正则化对数似然
problem = cp.Problem(cp.Maximize(log_likelihood/m - lambd * cp.norm(beta, 1)))

3. 参数分析

我们通过在不同λ值下求解问题,分析模型性能:

num_iterations = 100
lambda_vals = np.logspace(-2, 0, num_iterations)  # λ从0.01到1

for i in range(num_iterations):
    lambd.value = lambda_vals[i]
    problem.solve()
    # 记录训练和测试误差
    train_error[i] = error((X @ beta).value, Y)
    test_error[i] = error((X_test @ beta).value, Y_test)
    beta_vals.append(beta.value)

4. 结果可视化

误差曲线展示了不同λ下的性能:

plt.plot(lambda_vals, train_error, label="训练误差")
plt.plot(lambda_vals, test_error, label="测试误差")
plt.xscale("log")
plt.legend()
plt.xlabel(r"$\lambda$")

正则化路径显示了系数随λ的变化:

for i in range(n):
    plt.plot(lambda_vals, [wi for wi in beta_vals])
plt.xlabel(r"$\lambda$")
plt.xscale("log")

参数对比展示了最优λ下的参数估计:

idx = np.argmin(test_error)  # 选择测试误差最小的λ
plt.plot(beta_true, label="真实参数")
plt.plot(beta_vals[idx], label="估计参数")
plt.legend()

实际应用建议

  1. λ选择:通过交叉验证选择使验证集误差最小的λ值
  2. 特征解释:非零系数对应的特征可视为对分类有显著影响的特征
  3. 数据标准化:在实际应用中,应先对特征进行标准化处理
  4. 大规模数据:对于大数据集,考虑使用随机梯度下降等更高效的优化方法

总结

通过CVXPY实现L1正则化逻辑回归,我们不仅能够构建分类模型,还能获得模型的稀疏解和特征选择能力。这种方法特别适用于高维数据,其中许多特征可能是不相关或冗余的情况。CVXPY的凸优化框架使得这类问题的建模和求解变得简洁而高效。

cvxpy A Python-embedded modeling language for convex optimization problems. cvxpy 项目地址: https://gitcode.com/gh_mirrors/cv/cvxpy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祖筱泳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值