【发布时间】:2011-10-03 07:56:53
【问题描述】:
我知道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)
【问题讨论】:
-
只是一个小旁注:您不应该将 defaultdict 用于具有默认值的函数,因为这样会在
yourDefaultDict[i]处为您查询的所有值i创建一个字典条目。在这里我看不出有什么问题。 -
@ninjagecko:哦!你说得对!我会修复我的版本。感谢您指出这一点。
标签: python math statistics machine-learning numerical-methods