4

我知道 this 的存在以及this在这个话题上的存在。但是,这次我想最终确定 Python 中的实际实现。

我唯一的问题是肘点似乎正在从我的代码的不同实例中改变。观察这篇文章中显示的两个图。虽然它们在视觉上看起来相似,但肘点的值发生了显着变化。两条曲线均由平均 20 次不同的运行生成。即便如此,肘点的值也会发生显着变化。我可以采取哪些预防措施来确保该值在一定范围内?

我的尝试如下所示:

def elbowPoint(points):
  secondDerivative = collections.defaultdict(lambda:0)
  for i in range(1, len(points) - 1):
    secondDerivative[i] = points[i+1] + points[i-1] - 2*points[i]

  max_index = secondDerivative.values().index(max(secondDerivative.values()))
  elbow_point = max_index + 1
  return elbow_point

points = [0.80881476685027154, 0.79457906121371058, 0.78071124401504677, 0.77110686192601441, 0.76062373158581287, 0.75174963969985187, 0.74356408965979193, 0.73577573557299236, 0.72782434749305047, 0.71952590556748364, 0.71417942487824781, 0.7076502559300516, 0.70089375208028415, 0.69393584640497064, 0.68550490458450741, 0.68494440529025913, 0.67920157634796108, 0.67280267176628761]
max_point = elbowPoint(points)  

在此处输入图像描述 在此处输入图像描述

4

1 回答 1

3

听起来您真正关心的是如何平滑包含噪声的数据?在这种情况下,也许您应该首先将曲线拟合到数据中,然后找到拟合曲线的肘部?

这是否可行取决于噪声源,以及噪声对您的应用程序是否重要?顺便说一句,您可能想通过查看拟合中省略某个点时(或希望不会)如何更改(或希望不会)来查看拟合对数据的敏感程度(显然,使用足够高的多项式,您将始终获得良好的拟合到一组特定的数据,但您可能对一般情况感兴趣)

我不知道这种方法是否可以接受,尽管我认为对小错误的敏感性很糟糕。最终通过拟合曲线,您是说在理想情况下,基础过程是由曲线建模的,并且与曲线的任何偏差都是错误/噪声

于 2011-07-12T13:42:20.080 回答