Нахождение точки сгиба кривой устойчивым способом? - PullRequest
3 голосов
/ 12 июля 2011

Мне известно о существовании этого и этого по этой теме.Тем не менее, я хотел бы завершить реальную реализацию в 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)  

enter image description here enter image description here

1 Ответ

3 голосов
/ 12 июля 2011

Звучит так, будто вы действительно беспокоитесь о том, как сгладить ваши данные, поскольку они содержат шум?в этом случае, возможно, вам следует сначала подогнать кривую к данным, а затем найти колено подогнанной кривой?

Будет ли это работать, будет зависеть от источника шума, и если шум важен для вашегоприложение?кстати, вы можете захотеть увидеть, насколько чувствительно вы подходите к своим данным, увидев, как они изменяются (или, надеюсь, не изменяются), когда точка пропускается из подгонки (очевидно, с достаточно высоким полиномом, вы всегда получите хорошее соответствиек конкретному набору данных, но вы, вероятно, заинтересованы в общем случае)

Я понятия не имею, является ли этот подход приемлемым, интуитивно, хотя я думаю, что чувствительность к небольшим ошибкам плохая.в конечном итоге, подгоняя кривую, вы говорите, что базовый процесс в идеальном случае моделируется кривой, и любое отклонение от кривой является ошибкой / шумом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...