我明白你正在尝试用几个小的伽玛分布来分段重建你的cdf,每个都有不同的比例和形状参数来捕获你的分配的“本地”区域。
如果您的实证分布是多模态的/难以通过一个“全局”参数分布进行总结,可能是有道理的。
不知道你是否有具体的理由背后专门设置几个伽玛分布,但是如果你的目标是试图适应一个相对平滑的分布,并捕捉你的经验性cdf,或许你可以看一下核密度估计。它本质上是一种非参数的方式来适应您的数据分发。
例如,您可以尝试高斯内核,并更改带宽参数以控制您的合适程度。太小的带导致不平滑(“过度配合”)结果[高方差,低偏差]。太大的带宽导致非常顺利的结果,但是具有高偏差。
from sklearn.neighbors.kde import KernelDensity
kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(dataPoints)
那么选择平衡偏差 – 方差折衷的带宽参数的好方法是使用交叉验证。基本上,高层次的想法是分割数据,在测试集上运行训练集分析和“验证”,这样可以防止数据过度使用。
幸运的是,sklearn还实现了一个很好的例子,使用交叉验证来选择Guassian内核的最佳带宽,您可以从以下位置借用一些代码:
希望这可以帮助!