问题描述
我仍然不太确定如何理解使用 scipy
检测峰时的参数“宽度”。这是我正在考虑的直方图:
如果我设置
peaks,_ = find_peaks(probsuc,width=4)
peak_prominences(probsuc,peaks,wlen=7)
然后输出看起来像
(array([0.20229167,0.25791667]),array([ 4,39]),array([10,45]))
但是,如果我设置了 width=5
,则只能检测到一个峰值:
(array([0.20229167]),array([4]),array([10]))
如果 width=6
,则无法检测到峰值。我想知道宽度到底是什么意思? (我不太明白documentation上的描述)如果我想检测直方图上的两个主要峰值,是否有设置width
值的通用策略?
谢谢:)
解决方法
width
参数告诉函数仅当一定数量的连续样本或 bin 超过 threshold
和 height
参数时才将峰值视为局部最大值。
当您增加 width
的值时,峰的数量会减少,因为您正在添加越来越严格的条件。在您的示例中,width=5
未找到其中一个峰值,因为五个 bin 的高度不符合被视为局部最大值的条件。
由于 width
是超参数,因此没有单一的正确方法可以找到其最佳值。您可以找到一个好的 width
候选者的一种方法是生成许多序列并手动计算峰的数量以创建标记数据集。然后您可以运行网格搜索以找到最准确的 width
,例如导致最小均方误差的宽度。