如何最大化Logistic回归参数并寻找Python函数MyFunction最优参数组合
问题解答
问题1:如何最大化Logistic回归的函数参数?
首先明确两种常见场景的解决方案:
场景1:最大化Logistic函数的输出值
Logistic函数为 $σ(z) = \frac{1}{1+e^{-z}}$,其中 $z = w^T x + b$($w$ 为权重参数,$b$ 为偏置)。由于 $σ(z)$ 是单调递增函数,要最大化输出只需最大化 $z$:
- 若输入特征 $x$ 为正,可将权重 $w$ 设为无穷大的正值、偏置 $b$ 设为无穷大;反之则设为无穷大的负值。但这种做法无实际意义,会导致模型完全过拟合,无法泛化到新数据。
场景2:通过优化参数最大化模型性能(如对数似然)
Logistic回归通常采用最大似然估计优化参数,等价于最大化训练数据的对数似然函数(或最小化交叉熵损失),常用方法包括:
- 梯度上升法:沿对数似然函数的梯度方向迭代更新参数,是最基础的优化方式。
- 牛顿法/拟牛顿法:利用二阶导数信息(海森矩阵),收敛速度远快于梯度上升,常用实现有BFGS、L-BFGS。
- 批量/随机/小批量梯度下降:本质是最小化负对数似然损失,与最大化对数似然等价,适合大规模数据集。
- 工具库调用:使用Scikit-learn的
LogisticRegression类,默认用liblinear求解器,也可选择saga、lbfgs等求解器,自动完成参数优化。
问题2:如何找到MyFunction的参数组合使返回值x最大化?
要最大化返回的行数x(最大值为150000,即所有行满足条件),可按以下步骤操作:
解析函数的条件逻辑
查看MyFunction的代码实现,明确a-j这10个参数与数据表列的判断规则:- 若为逐列独立判断(如
col1 >= a、col2 == b等):针对每个列的规则,选择让该列所有行都满足的参数。例如:- 规则为
col > param时,取param为该列最小值减1; - 规则为
col == param时,取param为该列出现次数最多的取值。
- 规则为
- 若为多参数组合判断(如线性组合
a*col1 + b*col2 + ... >= threshold):属于黑盒优化问题,需用启发式方法求解。
- 若为逐列独立判断(如
启发式优化方法实现
对于黑盒类条件判断,推荐使用无需梯度的优化算法:- 差分进化算法:用Scipy的
scipy.optimize.differential_evolution,将目标转为最小化-MyFunction(a,b,...j),参数范围设为(-np.inf, np.inf)即可运行。 - 遗传算法:用
deap库实现种群迭代,通过选择、交叉、变异操作寻找最优参数组合,适合离散+连续混合的参数空间。
- 差分进化算法:用Scipy的
快速验证极端情况
先尝试极端参数(如所有参数取极大值、极小值),观察x是否接近150000,判断是否存在让所有行都满足条件的参数组合。若存在,直接采用该组合即可。
内容的提问来源于stack exchange,提问作者pepazdepa
相关产品推荐
相关产品推荐

