C++ 近似高斯混合-无法拟合正确数量的峰值

C++ 近似高斯混合-无法拟合正确数量的峰值,c++,histogram,gaussian,C++,Histogram,Gaussian,大约两周前,我问()一个快速算法,用于检测直方图中高斯峰的数量。提出了一种非常好的方法:近似高斯混合(AGM) 我在C++应用程序中尝试并实现了这种方法,用日志函数来控制EM收敛。我不得不说,这种方法非常快,它看到了解决方案。但是,我无法在正确的时间停止吹扫。我想知道这是否是由我的数据引起的 问题解释: 在我的数据中有5个峰值(见图),平均值为(100200300400500),高度差异显著(第一个比第二个高4倍,第二个比第三个高3倍…) 当我将参数设置为(threshold=0.6,expan

大约两周前,我问()一个快速算法,用于检测直方图中高斯峰的数量。提出了一种非常好的方法:近似高斯混合(AGM)

我在C++应用程序中尝试并实现了这种方法,用日志函数来控制EM收敛。我不得不说,这种方法非常快,它看到了解决方案。但是,我无法在正确的时间停止吹扫。我想知道这是否是由我的数据引起的

问题解释:

在我的数据中有5个峰值(见图),平均值为(100200300400500),高度差异显著(第一个比第二个高4倍,第二个比第三个高3倍…)

当我将参数设置为(threshold=0.6,expansion\u factor=0.25)时,我得到了这个解决方案:(结果在文件的底部)。算法最终有三个峰值,其中只有中间的一个似乎是正确的

我尝试过使用参数和我收到的(阈值=0.55,扩展系数=0.50)

结果再次出现三个峰值,但:

  • 第二个和第三个峰值似乎是正确的
  • 找不到500处的峰值,但我知道该峰值的数据非常糟糕,没有高斯分布
  • 中具有较大的方差和平均值。

是否可能是我在实现过程中犯了一些错误,或者当两个最重要的峰值识别为一个峰值时,您能告诉我错误在哪里吗

您好:-)请记住,扩展因子可以加快算法的速度,但也可以使其不稳定(事实上,如果它不是零,则算法不一定收敛!)。根据经验,不要使用膨胀系数
>0.2
,也不要使用膨胀系数高达
0.5
。在你知道你有一个没有错误的正确实现之前,最好保持它为零。好的,谢谢你,有了零扩展因子,它收敛得更快。现在我以两个组件结束,问题是它们中的一个仍然位于真正的第一个和第二个组件之间。我将再次尝试检查我的实现。