python - 在 curve_fit (scipy) 期间将边界应用于特定变量会导致错误

标签 python matplotlib scipy curve-fitting

我试图在曲线拟合期间将边界应用到某些参数上,但是当我尝试这样做时收到以下错误消息:

ValueError:要解压的值太多

在我的例子中,绑定(bind)命令中的每个二元组不是分别对应于 sigmoidscaled 函数中的 x0、k、lapse、guess(即也对应于 p0)吗?

然后我尝试尝试通过将绑定(bind)命令减少到以下以消除“太多值”来弄清楚它是如何工作的:

bounds=((-np.inf,np.inf), (0,1))

然后我得到错误信息:

ValueError:边界和 x0 之间的形状不一致。

我在这里弄错了什么?

import pylab
from scipy.optimize import curve_fit
from matplotlib.pyplot import *

n = 20 #20 trials
ydata = [0/n, 9.0/n, 9.0/n, 14.0/n, 17.0/n] #Divided by n to fit to a plot of y =1
xdata = np.array([ 1.0, 2.0, 3.0, 4.0, 5.0])


#The scaled sigmoid function
def sigmoidscaled(x, x0, k, lapse, guess):
    F = (1 + np.exp(-k*(x-x0))) 
    z = guess + (1-guess-lapse)/F
    return z

p0=[1,1,0,0] 
popt, pcov = curve_fit(sigmoidscaled, xdata, ydata, p0, bounds=((-np.inf,np.inf), (-np.inf,np.inf), (0,1), (0,1))

#Start and End of x-axis, in spaces of n. The higher the n, the smoother the curve.
x = np.linspace(1,5,20)
#The sigmoid values along the y-axis, generated in relation to the x values and the 50% point.
y = sigmoidscaled(x, *popt)

pylab.plot(xdata, ydata, 'o', label='Psychometric Raw', color = 'blue')
pylab.plot(x,y, label='Psychometric Fit', color = 'blue')
#y axis range.
pylab.ylim(0, 1)
#Replace x-axis numbers as labels and y-axis numbers as percentage
xticks([1., 2., 3., 4., 5.], ['C1','CN2','N3','CN4','S5'])
yticks([0.0, 0.2, 0.4, 0.6, 0.8, 1.0], ['0%','20%','40%','60%','80%','100%'])
pylab.legend(loc='best')
xlabel('Conditions')
ylabel('% perceived more sin like')
pylab.show() 

最佳答案

问题行是:

popt, pcov = curve_fit(sigmoidscaled, xdata, ydata, p0, bounds=((-np.inf,np.inf), (-np.inf,np.inf), (0,1), (0,1))

来自documentation , bounds 需要是数组 likes 的二元组。因此,无需指定每个点的下限和上限,您需要指定第一个数组中每个点的下限,然后是第二个数组中每个点的上限,如下所示:

popt, pcov = curve_fit(sigmoidscaled, xdata, ydata, p0, bounds=((-np.inf, -np.inf, 0, 0), (np.inf, np.inf, 1, 1)))

改完之后,剧情就跳出来了!

关于python - 在 curve_fit (scipy) 期间将边界应用于特定变量会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37062866/

相关文章:

python - 从 falcon 中的参数化路由路径解析 uuid

python - CS 圈编码练习 : 26 Letters

python - 使用函数绘制 matplotlib 子图

python - matplotlib 3.0.0,无法从 'get_backend' 导入名称 'matplotlib'

python - 如何在 matplotlib 中的 Pandas 条形图上添加一条线?

python - 为什么 a**2 != a * a 对于一些花车?

python - 替换 Numpy 数组中的子数组

python - dfitpack.错误 : (m>k) failed for hidden m: fpcurf0:m=1

python - 有没有一种为 scipy.optimize.root 或 scipy.optimize.fsolve 动态创建非线性方程的好方法?

python - Matplotlib 全屏无法工作