Python 累积密度函数对某些分位数的最小二乘拟合
假设一个用户给出了这样一个分布的某些百分位数,我们试图找到分布的参数Python 累积密度函数对某些分位数的最小二乘拟合,python,scipy,Python,Scipy,假设一个用户给出了这样一个分布的某些百分位数,我们试图找到分布的参数 # a list of (p,x) tuples, where P(X<x)=p percentiles = [(0.2,8),(0.4,12),(0.5,16),(0.9,30)] 编辑:约翰指出,我认为最初的猜测很重要。下面是我用来从用户输入中获得参数初始猜测的(粗略)方法: def percentiles_to_list(percentiles): out =[] i = 1 c = 1
# a list of (p,x) tuples, where P(X<x)=p
percentiles = [(0.2,8),(0.4,12),(0.5,16),(0.9,30)]
编辑:约翰指出,我认为最初的猜测很重要。下面是我用来从用户输入中获得参数初始猜测的(粗略)方法:
def percentiles_to_list(percentiles):
out =[]
i = 1
c = 1
for p,q in percentiles:
if c == len(percentiles):
number_to_append = int(100 - i)
else:
number_to_append = int(p*100-i)
out += [q]*number_to_append
i = p*100
c += 1
return out
def initial_guess(percentiles):
lis = percentiles_to_list(percentiles)
mean = np.mean(lis)
stdev = np.std(lis)
return mean,stdev
要获得良好的拟合,对的初始猜测很重要。这里,给定的50%百分位是
mu
的完美初始猜测。对于sigma
,我们可以进行任何合理的初始猜测。默认猜测都是1
s,在本例中这似乎太离谱了。除了(或代替)初始猜测,还可以为曲线拟合设置参数边界
注意,由于严格的单调函数,我们可以切换x
和y
的角色,以检查这是否会提供更令人满意的拟合
下面的代码尝试这两种拟合,并以图形方式显示结果。两者都相当强烈
从matplotlib导入pyplot作为plt
将numpy作为np导入
从scipy导入统计信息
从scipy导入优化
#(p,x)元组列表,其中p(XThanks,这是完美的。我刚刚有机会测试你的建议。
def percentiles_to_list(percentiles):
out =[]
i = 1
c = 1
for p,q in percentiles:
if c == len(percentiles):
number_to_append = int(100 - i)
else:
number_to_append = int(p*100-i)
out += [q]*number_to_append
i = p*100
c += 1
return out
def initial_guess(percentiles):
lis = percentiles_to_list(percentiles)
mean = np.mean(lis)
stdev = np.std(lis)
return mean,stdev