gpt4 book ai didi

statistics - 计算两个叠加的高斯函数的质心

转载 作者:行者123 更新时间:2023-12-01 05:52:22 26 4
gpt4 key购买 nike

我试图找到解决以下问题的方法。我有一组点,它们应该对以不同点为中心的 2 个高斯函数的总和进行建模。我需要找到这两点。到目前为止,我的方法一直是找到整个集合的质心并在其下方和上方切割日期集合。然后我计算每块的质心,这些是我的中心。然而,这种方法削减了泄漏到数据右半部分的左高斯信息。当高斯分布很近时,这会使程序失败。有没有办法更聪明地做到这一点?由于计算困难,如果解决方案不涉及曲线拟合,我更愿意。

最佳答案

由于 OP 没有显示任何数据,因此不清楚数据的噪声有多大。此外,尚不清楚此处如何定义“紧密在一起”。在下面,我有一个简单的近似,它适用于低噪声,并假设左侧数据由左侧高斯分布,而右侧数据由右侧高斯分布。这对位置、高度,尤其是标准偏差给出了一些限制。

它肯定适用于单峰,但对于混合双峰(在上述限制范围内)非常好

#!/usr/bin/python
import matplotlib.pyplot as plt
import numpy as np

def gaussian( x, x0, s, a):
return a * np.exp( -( x - x0 )**2 / ( 2 * s**2 ) ) / np.sqrt( 2 * np.pi * s**2 )

def get_x0( x1, x2, x3, y1, y2, y3 ):
l12= np.log( y1 / y2 )
l13= np.log( y1 / y3 )
return ( ( x2 + x1 )/2. - ( x3 + x1 )/2. * l12/l13 * ( x3 - x1 ) / ( x2 - x1 ) ) / ( 1 - l12 / l13 * (x3 - x1 ) / ( x2 - x1 ) )


fig = plt.figure( )
ax = fig.add_subplot( 2, 1, 1 )

xL = np.linspace(-8, 8, 150 )
yL = np.fromiter( ( gaussian( x,-2.1, 1.2, 8 ) for x in xL ), np.float )
marker=[10,15,20]

x1 = xL[ marker[0] ]
x2 = xL[ marker[1] ]
x3 = xL[ marker[2] ]
y1 = yL[ marker[0] ]
y2 = yL[ marker[1] ]
y3 = yL[ marker[2] ]

print get_x0( x1, x2, x3, y1, y2, y3 )

ax.plot( xL, yL )
ax.scatter( [ x1, x2, x3 ],[ y1, y2, y3 ])

bx = fig.add_subplot( 2, 1, 2 )
yL = np.fromiter( ( gaussian( x,-2.1, 1.2, 8) + gaussian( x,0.7, 1.4, 6 ) for x in xL ), np.float )
marker=[10,15,20]
x1 = xL[ marker[0] ]
x2 = xL[ marker[1] ]
x3 = xL[ marker[2] ]
y1 = yL[ marker[0] ]
y2 = yL[ marker[1] ]
y3 = yL[ marker[2] ]
bx.scatter( [ x1, x2, x3 ],[ y1, y2, y3 ])
print get_x0( x1, x2, x3, y1, y2, y3 )
marker=[-20,-25,-30]
x1 = xL[ marker[0] ]
x2 = xL[ marker[1] ]
x3 = xL[ marker[2] ]
y1 = yL[ marker[0] ]
y2 = yL[ marker[1] ]
y3 = yL[ marker[2] ]
bx.scatter( [ x1, x2, x3 ],[ y1, y2, y3 ])
print get_x0( x1, x2, x3, y1, y2, y3 )
bx.plot( xL, yL )

plt.show()

节目:
#Single
-2.0999999999999455
#Double
-2.0951188129317813
0.6998760921436634

这非常接近 -2.10.7
gaussians

在噪声的情况下,可能需要一些平均。

关于statistics - 计算两个叠加的高斯函数的质心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52827141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com