如何使用Python找到陡峭下降点之前的点?
如何使用Python找到陡峭下降点之前的点?
我有一个离散的数据集,并在下面绘制了它。我想找到曲线在急剧下降之前的点,大约在索引=600附近。我阅读了这篇帖子,并尝试使用最大绝对二阶导数来找到这个点,但结果是错误的,因为存在一些“凹凸”点,而且我不确定我想找的点是否称为拐点。
我正在考虑平滑曲线。但在平滑之前,还有其他方法可以尝试吗?
plt.scatter(range(len(score)),score) plt.axvline(x=600,linestyle='--') plt.xlabel('Index') plt.ylabel('Scores') plt.show()
如何使用Python找到陡峭下降前的点?
在解决这个问题之前,我们首先需要了解问题的原因。根据所提供的信息,我们可以推断出问题的原因是作者想要找到在给定数据集中陡峭下降之前的点。作者提供了一个基于中心差分法的近似导数的方法,以解决这个问题。
为了解决这个问题,作者提供了一个名为"derivatives"的函数。这个函数的参数包括"score"和"h",其中"score"是一个包含数据集的列表,"h"是一个整数,默认值为100。函数的主要任务是通过中心差分法计算每个索引处的导数,并将结果存储在一个字典中。函数的具体实现如下:
def derivatives(score, h=100): score_derivatives = {} for i in range(h,len(score)-h): first_derivative = (score[i+h]-score[i-h])/(h*2) score_derivatives[i] = first_derivative return score_derivatives
这个函数将返回一个字典,其中包含每个索引处的导数。为了找到第一个导数值小于预设阈值的索引,我们只需要遍历这个字典即可。如果"h"的值足够大(默认值为100),这个方法将对噪声具有鲁棒性。
然而,作者还提到希望找到一个更通用的方法。当数据集发生变化时,阈值应根据图形的变化而重新设定。为了解决这个问题,作者建议还可以通过差分方法来近似计算二阶导数。具体的方法可以参考维基百科上的链接:en.wikipedia.org/wiki/…
通过以上的整理,我们可以得出以下结论:为了找到陡峭下降前的点,我们可以使用中心差分法来近似计算导数,并设置一个阈值来确定陡峭下降的斜率。如果需要更通用的方法,我们还可以使用差分方法来近似计算二阶导数。这些方法可以通过Python来实现,从而解决这个问题。