如何估计噪声层背后的高斯分布?

所以我有这个1-D数据的直方图,其中包含一些以秒为单位的转换时间.数据包含大量噪声,但噪声背后是一些描述正确时间值的峰值/高斯数. (见图片)

从在两个位置之间行走的人的过渡时间检索数据,其具有从正常步行速度分布(平均1.4m / s)获得的不同速度.有时,两个位置之间可能存在多条路径,可能会产生多个高斯.

我想提取出现在噪音之上的基础高斯.但是,由于数据可能来自不同的场景,但是任意数字(比如说大约0-3)的正确路径/“高斯”,我不能真正使用GMM(高斯混合模型),因为这需要我知道高斯分量的数量?

我假设/知道正确的转换时间分布是高斯分布,而噪声来自其他分布(卡方?).我对这个话题很陌生,所以我可能完全错了.

由于我事先知道两点之间的地面真实距离,因此我知道手段的位置.

这张图片有两个正确的高斯,有250s和640s的平均值. (变化越大,方差越大)

《如何估计噪声层背后的高斯分布?》

该图像有一个正确的高斯,平均值为428s.
《如何估计噪声层背后的高斯分布?》

题:
有没有一些很好的方法来检索高斯人,或者至少可以根据上述数据显着降低噪音?我不希望看到那些淹没在噪音中的高斯人.

最佳答案 我会使用
Kernel Density Estimation来解决这个问题.我允许您直接从数据中估计概率密度,而不会对基础分布做太多假设.通过更改内核带宽,您可以控制应用的平滑程度,我认为可以通过目视检查手动调整,直到您得到满足您期望的内容.使用scikit-learn在python中实现KDE的一个例子可以在
here找到.

例:

import numpy as np
from sklearn.neighbors import KernelDensity

# x is your original data
x = ...
# Adjust bandwidth to get the smoothness to your liking
bandwidth = ...

kde = KernelDensity(kernel='gaussian', bandwidth=bandwidth).fit(x)
support = np.linspace(min(x), max(x), 1000)
density = kde.score_samples(support)

估算过滤后的分布后,您可以使用类似this的方法对其进行分析并识别峰值.

from scipy.signal import find_peaks

# You can tweak with the other arguments of the 'find_peaks' function
# in order to fine-tune the extracted peaks according to your PDF
peaks = find_peaks(density)

免责声明:这是一个或多或少的高级答案,因为您的问题也很高.我假设你知道你在做什么代码,只是在寻找想法.但是,如果您需要任何具体的帮助,请向我们展示一些代码以及您迄今为止所尝试的内容,以便我们可以更加具体.

点赞