4

私はthisの存在を認識しており、このトピックについては this を使用しています。しかし、今回はPythonでの実際の実装についてまとめたいと思います。

私の唯一の問題は、肘のポイントがコードのさまざまなインスタンス化から変化しているように見えることです。この投稿に示されている 2 つのプロットを観察してください。視覚的には似ているように見えますが、エルボー ポイントの値が大幅に変更されています。両方の曲線は、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 に答える