2013-05-09 3 views
0

비슷한 모양의 데이터베이스에 대해 8 포인트 (x, y)로 보간 된 플롯을 일치시키는 간단한 모양 일치 알고리즘을 구현하는 가장 좋은 방법은 무엇입니까? 12 000 개 항목), 각 플롯은 노드 수가 100 개를 초과합니다. 데이터베이스는 6 가지 카테고리의 플롯 (6 가지 조건에서 측정 된 신호)을 가지며 주요 목표는 올바른 카테고리를 찾는 것입니다 (따라서 모든 카테고리에 대해 비교할 약 2000 개의 플롯이 있습니다).비선형 최소 제곱을 사용한 플롯의 형태 일치

8 노드 플롯은 실제 측정 데이터를 나타냅니다. 그러나 지금은 데이터베이스에서 무작위 플롯을 선택한 다음 8 포인트를 가우쳐 가우스 난수 생성기를 사용하여 번짐으로 시뮬레이션합니다.

비선형 최소 제곱을 구현하여 데이터베이스의 각 플롯에 대한 8 노드 플롯의 모양을 비교하는 가장 좋은 방법은 무엇입니까? 당신이 알고있는 C++ 라이브러리가 있습니까?

8 노드 플롯의 실제 수식 (f (x))을 최소 자승으로 사용하려면 찾거나 gsl 라이브러리의 보간과 같이 요청한 포인트에서 보간을 사용하는 것으로 충분할 수 있습니까? ?

답변

1

실제 공식을 모른 채로 최소 제곱을 사용할 수 있습니다. 당신의 플롯 모두가 같은 x 값에서 측정하는 경우, 다음이 용이하다 - 당신은 단순히 일반적인 방법으로 합계를 계산 :

y_i이 8 노드 플롯의 포인트입니다

enter image description here

, sigma_i는 점의 오차이고 Y (x_i)는 y_i와 같은 x 위치에있는 데이터베이스의 플롯 값입니다. 모든 플롯이 동일한 x 값으로 측정되는 경우 왜 이것이 사소한지를 알 수 있습니다.

그렇지 않은 경우 데이터베이스에서 일부 기능 (알고있는 경우)을 사용하거나 포인트를 보간 (모르는 경우)하여 플롯하여 Y (x_i)를 얻을 수 있습니다. 가장 간단한 보간법은 점을 직선으로 연결하고 원하는 x_i에서 직선의 값을 찾는 것입니다. Other interpolations이 더 효과적 일 수 있습니다.

제 분야에서는 ROOT을 사용합니다. 그러나 scipy에는 많은 기능 모음이 있으며 파이썬을 사용해도 상관 없다면 시작하는 것이 더 쉬울 수도 있습니다.

두 가지 플롯이 독립적이지 않을 수도있는 한 가지 주요 문제점이 있습니다. Wikipedia suggests McNemar's test in this case.

또 다른 문제는 테스트 플롯에 많은 정보가 없기 때문에 결과가 통계적으로 큰 변동에 의해 크게 영향을 받게된다는 것입니다. 즉, 8 개의 테스트 포인트와 2 개의 플롯이 일치하는 경우 기본 함수가 실제로 같은지 또는 8 포인트가 단순히 (오류 막대 내부에서) 보이는 방식으로 뛰어 올랐는지 어떻게 알 수 있습니까? 데이터베이스에서 음모처럼 - 순전히 우연히! ... 네가 정말로 알지 못할 까봐 두렵다. 따라서 테스트가 잘되는 플롯은 가양 성 (낮은 순도)을 포함 할 것이고 테스트를 제대로하지 않은 플롯은 아마도 실제로 좋은 성냥 (낮은 효율) 일 것입니다.

해결하려면 더 많은 포인트가있는 테스트 플롯을 사용하거나 다른 정보를 가져와야합니다. 다른 이유로 일치 할 수 없다는 것을 알고있는 데이터베이스에서 플롯을 버리면 많은 도움이됩니다.

+0

답장을 보내 주셔서 감사합니다. 나는 ROOT도 사용하지만 플로팅 (그래픽)에만 사용됩니다. 보간을 위해 저는 Gnu Scientific Library를 사용했습니다. 아쉽게도 비교를 위해 플롯의 노드가 8 개 이상있을 가능성이 없으며 최소 제곱 기반 방법이 매우 만족스럽지 않은 결과를 나타냅니다 (테스트 중 9 %에서만 올바르게 일치 함). 그래서 나는 지금 그것을하는 더 좋은 방법을 찾고있는 중입니다. 시간과 도움에 감사드립니다. –

관련 문제