我有一组数据点,看起来有点像一条直线,在开始处有一条曲线。请参见下图,其中显示了具有最佳拟合线的点(适合整个数据集)。在
相反,它们可以用两个线性函数来描述(一条线穿过最左边的点集,另一条线穿过其余的数据点)。这些点实际上对应的是中子衰变,它包含两种不同的同位素。在
我不知道哪个点对应于哪个同位素,所以我需要做个最好的猜测。一种同位素的曲线将是一条直线,而另一种同位素的曲线将是另一条不同的直线。如何将两条不同的最佳拟合(线性)线拟合到数据点集,从而优化两者的拟合?在
我的一个想法是选择一个“cutouff point”,比如在t=100
(x轴),然后将左边的点拟合成一条直线,将右边的点拟合成另一条线。然后我可以计算两条直线的chi^2,以得到拟合的“优度”。然后,我可以继续做同样的事情很多次,使用稍微不同的截止点,直到我找到一对线,给出最好的整体拟合。在
另一种更复杂的想法是将这些数据点描述为两条线的组合,y= m1*t + m2*t + b1 + b2
,其中{b
s是y截距。然后,取总曲线的导数,我会得到dy/dt = m1+m2
。然后也许我可以循环使用不同的“剪切点”,并拟合直线,直到得到一个导数最接近m1+m2
的组合。但我不知道该怎么做,因为一开始我不是在处理一条曲线,而是一堆离散的数据点。在
优化Python中的两个fits的最佳方法是什么?在
下面是一个将两条直线拟合到一个数据集的示例,两条直线之间的交叉点也作为参数进行拟合。这个例子使用scipy的差分进化(DE)遗传算法来确定初始参数估计。DE的scipy实现使用拉丁超立方体算法来确保对参数空间的彻底搜索,并且该算法需要搜索范围-在本例中,这些边界是从数据的最大值和最小值中获取的。在
这可以解释为time-series segmentation问题与linear regression结合使用。有多种方法可以解决这个问题。其中一个你已经提到过:一个手动选择的点来分割数据,另一个正试图将误差最小化。在
首先,我尝试重新创建数据:
然后我用^{} 做两个线性拟合,它本身基于least squares的方法:
^{pr2}$绘制结果如下图:
现在,您可以使用自动分段算法,如SWAB来替换}切片,但如果您能够手动决定在哪一点拆分数据,我建议不要这样做。如果您正在寻找实现,请查看提供的链接。在
[100:]
和{从形式上讲,您提到的第二种方法基本上是尝试将数据拟合到圆锥曲线上。本质上,a pair of straight lines (POSL) is a type of conic section,因此可以用一般的二次曲线方程
ax^2 + by^2 + 2hxy + 2gx + 2fy + c = 0
来表示(而不是你在问题中提到的,它最终只会是斜率m1+m2的一条直线)。为了澄清这一点,当然将是上述形式的一个等式,当绘制时,会给出一个适合您的数据的POSL。你的算法能否收敛到它是另一回事。在您可以尝试使用方法来查找系数a、b、h、g、f&c。理想情况下,您将得到的圆锥截面系数将形成一个POSL,它将非常适合您的数据集。在
如果你决定实现这一点,你必须记住,这个通用方程可以代表很多形状,如抛物线、双曲线等。有可能的是,在培训之后,你发现回归卡住了,或者不收敛,变成了不同的形状,比如抛物线。在回归方法中,您可以尝试通过奖励遵守these conditions对于使圆锥截面成为POSL的必要性来推动回归到POSL形状。但这可能会使事情过于复杂。在
这个方法在数学上非常简洁,但是我敢打赌,让你训练过的模型收敛到一个POSL,相当于在刀口上平衡某个东西(POSL的条件本质上是非常狭窄的)。最有可能的是,它最终会给你一个抛物线、椭圆或双曲线的方程(这可能只会使你的数据集得到充分的拟合,即使是非最优的二次曲线回归解也是值得的)。在
尽管如此,如果你不觉得结果令人满意,那么一个更好的方法可能就是不再担心形状,使用神经网络来进行这种形式的非线性回归。或者你可以观察肘关节点,然后按照你在第一种方法中建议的那样划分你的数据集。在
相关问题 更多 >
编程相关推荐