我有一些严重嘈杂的直方图数据,它构成了一系列峰值。我需要在第一个区域下找到该区域,因此我计划进行样条拟合并使用导数找到相关的静止点(即第一个低谷)。但是,我不确定如何接近拟合数据的导数(或者实际上如何拟合数据)。
任何想法都会非常感激。
答案 0 :(得分:2)
如果您有原始数据,请使用高斯混合物而不是直方图作为密度近似值。然后估计的密度将是平滑函数(高斯密度的线性组合),您可以轻松找到静止点并计算任何给定间隔的质量。用于计算混合参数的简单且易于编程的方法是所谓的EM(估计最大化)算法。搜索“高斯混合”和/或“EM”应该会产生大量的命中,也许也会使用Matlab代码。
如果您没有原始数据,我还有其他一些想法。
答案 1 :(得分:1)
@Robert Dodier是正确的,但似乎不知道MatLab内置的gmdistribution。
如果您在数据中使用高斯混合,那么您需要做的就是确定哪个组件具有最大权重,并读取该组件的均值和方差。
样条平滑有偏差问题。它还给出非物理结果,如负概率密度。 GMM有一个更好的“基础”。
现在我个人喜欢使用ecdf和拟合cdf分析表单。这给了我最佳的分级(在图像中我可以大大提高计算速度)并减少中心噪声的影响。
[1] http://www.mathworks.com/help/stats/gmdistribution.fit.html
[2] http://www.mathworks.com/help/stats/ecdf.html
[3] http://www.mathworks.com/help/curvefit/custom-nonlinear-models.html
答案 2 :(得分:0)
所以最初混合高斯方法看起来非常有前景。问题在于,除了噪声数据之外,信号源实际上也会变成几个不同的情况,这样我经常会发现一个高斯人组合在一个数据集上工作会在另一个数据集上失败(大幅度)。
解决这个问题是可能的,但是更一般的解决方案将漂移/偏差引入到近似值中,这些近似值会根据噪声和基本情况产生不一致的影响。
经过一段时间的努力,我选择了尝试matlab的curvedspline
。这最终提供了一种更好的方法,然后我结合一些多维聚类分析来挑选脊柱拟合明显出错的地方。使用这意味着我可以丢弃这些异常值,而不是适应不良数据(即严重偏离批量数据的数据)。具体来说,我使用领域知识来计算出一些情况,根据定义,异常值是不适合的结果,而不是样本方差。这实际上只会导致每个样本丢弃几个数据点(20个中的1-2个)并最终得到非常干净的结果。