You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用scipy.optimize库求解sigmoid损失函数最小值的技术咨询

使用scipy.optimize库求解sigmoid损失函数最小值的技术咨询

我最近在研究用SciPy的优化工具求解基于sigmoid的损失函数最小值,经过多次迭代调整代码后,现在运行起来很顺畅。下面是我整理的完整实现代码,包含数据生成、损失函数定义和优化过程:

import numpy as np
from scipy.optimize import minimize

# 定义sigmoid函数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# 定义基于sigmoid的损失函数
def sigmoid_loss(theta, X, y_true):
    return np.mean((sigmoid(X @ theta) - y_true)**2)

# 生成合成数据集
np.random.seed(0)  # 设置随机种子保证结果可复现
m = 1000  # 样本数量
n = 5     # 特征维度
X = np.random.randn(m, n)

# 真实参数(列向量形式)
theta_true = np.array(
    [-0.4277, -0.5794, 0.9260, 0.0055, -0.6345]).reshape(-1, 1)

# 生成真实输出值(范围在0-1之间)
y_true = sigmoid(X @ theta_true)

# 初始化待优化的参数
theta_init = np.random.randn(5, 1)

# 设置优化的收敛阈值
tolerance = 1e-10

# 使用SciPy的minimize函数执行优化
result_NM = minimize(sigmoid_loss, theta_init.flatten(), args=(
    X, y_true.flatten()), method='Nelder-Mead', tol=tolerance)

简单说下这段代码的关键细节:

  • sigmoid函数负责把线性计算结果映射到0-1的概率区间
  • 损失函数用的是均方误差(MSE),计算模型输出和真实值之间的平均平方差
  • 生成合成数据时固定了随机种子,方便后续复现测试结果
  • 因为minimize函数要求输入的参数是一维数组,所以把初始参数和真实标签都用flatten()做了扁平化处理,适配函数输入要求
  • 选用的是Nelder-Mead无梯度优化算法,适合这种没有显式梯度表达式的场景

备注:内容来源于stack exchange,提问作者Aden Denitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:23:00