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

如何构建可自定义拐点且x趋近0时平滑过渡的自定义Sigmoid函数

自定义Sigmoid型函数:指定拐点+满足边界平滑过渡

问题根源

你使用的经典Logistic函数1/(1+np.exp(-k(x-x0)))无法满足x→0时y→0的边界条件——当x趋近于0时,函数值为1/(1+np.exp(k*x0)),是一个大于0的固定值,这就是x接近0时过渡生硬的核心原因。直接添加偏移量会被curve_fit自动调整覆盖,因为拟合过程会优先满足指定的拐点A、B,忽略手动添加的偏移。

解决方案:构造带边界约束的自定义Sigmoid

我们需要构造一个同时满足以下要求的函数:

  • 输入x>0时,输出y∈(0,1);x→0⁺时y→0,x→+∞时y→1
  • 严格经过你指定的两个拐点A(x₁,y₁)、B(x₂,y₂)
  • 曲线过渡平滑

函数设计思路

对经典Logistic函数做归一化修正:先计算原Logistic在x=0处的取值,再将整个函数向下偏移该值,最后归一化到0~1范围,确保边界条件成立。

具体实现代码

1. 自定义Sigmoid函数定义

import numpy as np

def fixed_boundary_sigmoid(x, k, x0):
    # 计算原Logistic在x=0处的取值
    y_at_0 = 1 / (1 + np.exp(k * x0))
    # 原始Logistic输出
    raw_y = 1 / (1 + np.exp(-k * (x - x0)))
    # 归一化:让x→0时y→0,x→∞时y→1
    normalized_y = (raw_y - y_at_0) / (1 - y_at_0)
    # 强制x≤0时返回0(符合仅接受正输入的要求)
    normalized_y = np.where(x <= 0, 0, normalized_y)
    return normalized_y

2. 拟合拐点参数

from scipy.optimize import curve_fit

# 你的指定拐点A、B
xdata = np.array([0.22, 1.34])
ydata = np.array([0.1, 0.9])

# 参数初始猜测:k控制曲线陡峭度,x0控制曲线中心位置
p0 = [2, np.median(xdata)]

# 拟合时设置参数边界:k≥0(保证函数递增),x0≥0(避免曲线左偏)
popt, pcov = curve_fit(fixed_boundary_sigmoid, xdata, ydata, p0=p0, 
                       bounds=([0, 0], [np.inf, np.inf]), method='dogbox')

k_opt, x0_opt = popt
print(f"拟合参数:k={k_opt:.4f}, x0={x0_opt:.4f}")

3. 绘制验证曲线

import matplotlib.pyplot as plt

x = np.linspace(0, 5, 1000)
y = fixed_boundary_sigmoid(x, k_opt, x0_opt)

plt.figure(figsize=(8,6))
plt.plot(xdata, ydata, 'ro', markersize=8, label='指定拐点A/B')
plt.plot(x, y, 'b-', linewidth=2, label='自定义Sigmoid曲线')
plt.ylim(-0.05, 1.05)
plt.xlim(-0.1, 5.1)
plt.xlabel('输入x')
plt.ylabel('输出y')
plt.legend(loc='best')
plt.grid(alpha=0.3)
plt.show()

效果说明

  • 该函数天然满足x→0时y→0,x→∞时y→1的边界条件,解决了原曲线在x接近0时的过渡生硬问题
  • 拟合过程仅调整k(曲线陡峭度)和x0(曲线中心)两个参数,确保严格经过你指定的拐点A、B
  • 函数保持标准S形曲线的平滑特性,且对正输入以外的情况做了边界处理

内容的提问来源于stack exchange,提问作者cercio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:44:49