我想将一些数据点拟合为正态分布,但我找不到一个函数来输入数据点的权重。CCD_ 1只需要一些数据,如果需要,CCD_ 2和CCD_ 3参数用于平均值和标准偏差。
我的数据的权重是浮点,所以我不能使用将正态分布拟合到加权列表中描述的解决方案,原因很明显。
values = [0, 1, 2, 3, ..., 44, 52]
weights = [0.06537925227866273, 0.9735569357920033, 3.1333312174908325, 5.558819116316957, ..., 0.0070813375592937555, 0.040237487324237445]
对我来说,将权重乘以100然后使用round()
不是一个好的解决方案,因为权重可能会变得更小。
您可以通过对数据和平方误差取加权平均值来拟合具有正态分布的加权数据:
def fit_normal(values, weights):
# prepare
values = np.array(values)
weights = np.array(weights)
# estimate mean
weights_sum = weights.sum()
mean = (values*weights).sum() / weights_sum
# estimate variance
errors = (values-mean)**2
variance = (errors*weights).sum() / weights_sum
return (mean, variance)