x축을 따라 비선형 왜곡이 있는 두 가격 차트의 비교 - 페이지 6

 

DTW를 통해 이 문제를 해결하는 방법(예제):

  1. 지난 100개의 막대와 같이 역사상 유사한 상황을 찾아야 합니다.
  2. 1,000,000개 바의 사용 가능한 이력.
  3. 먼저 50개의 막대로 구성된 1,000,000개의 시퀀스를 가져와서 DTW를 통해 템플릿과 비교했습니다.
  4. 우리는 이미 각각 55개의 막대가 있는 1,000,000개의 시퀀스를 추가로 가져와 DTW를 통해 템플릿과 비교했습니다.
  5. 이제 60바입니다.
  6. .....
  7. 각각 100바.
  8. .....
  9. 각각 300바. 그리고 거기서 멈출 수 있습니다.

복잡도가 O(N ^ 2)인 DTW 알고리즘을 사용하여 총 50,000,000번의 비교가 수행되었습니다. 저것들. 매우 대략적으로 5 * 10^11 (5000억)개의 기본 계산 연산을 수행했습니다.

이제 새로운 기준 이 생겼습니다. 5000억 개의 계산이 다시 수행되었습니다.

우리는 마지막 요소의 200,000부터 시작하여 역사를 실행하기로 결정했습니다. 대략적으로 한 번 실행하려면 각각 200,000번, 5000억 번을 계산해야 합니다. 총 10^17 계산.

교활한 최적화가 있더라도 두 자릿수 이상의 이득을 얻지 못할 것입니다. 저것들. 가장 좋은 경우에는 10 ^ 15개 정도 계산해야 합니다.

 
hrenfx :

DTW를 통해 이 문제를 해결하는 방법(예제):

현재 우리는 DTW 자체에 더 관심이 있고 적용 방법에 관심이 없습니다.
 
hrenfx : DTW를 통해 이 작업을 해결하는 방법(예제):

어렵지 않다면 코드에서 이 문제에 대한 해결책을 보여주세요. 그다지 실용적이지는 않지만 스포츠적인 관심

 

올바른 생각을 가진 사람은 결과가 단순히 기다리지 않는 알고리즘의 구현을 착수하지 않을 것입니다.

DTW와 같은 동일한 Pearson CC도 적합하지 않습니다. 계산 복잡도도 O(N^2)입니다. 그러나 O(N * log(N)) 복잡성을 가진 Pearson의 QC 계산에는 상당한 알고리즘 최적화가 있어 허용 가능한 시간 내에 이 문제를 해결할 수 있습니다. Codebase에 이 알고리즘의 구현을 게시했습니다. 제기된 문제를 해결하려면 지그재그로 변환된 dVR 세트에 동일한 알고리즘을 적용하는 것이 남아 있습니다.

 
hrenfx :

올바른 생각을 가진 사람은 결과가 단순히 기다리지 않는 알고리즘의 구현을 착수하지 않을 것입니다.

DTW와 같은 동일한 Pearson CC도 적합하지 않습니다. 계산 복잡도도 O(N^2)입니다. 그러나 허용 가능한 시간 내에 이 문제를 해결할 수 있는 복잡성이 O(N * log(N))인 Pearson QC 계산의 중요한 알고리즘 최적화가 있습니다. Codebase에 이 알고리즘의 구현을 게시했습니다. 제기된 문제를 해결하려면 지그재그로 변환된 dVR 세트에 동일한 알고리즘을 적용하는 것이 남아 있습니다.


주제의 저자가 직면한 작업과 그의 답변으로 시작하기 위해 읽을 것입니다.
 
Integer :


그것을 시도했다. 사용법도 불명. 출력은 변환 경로 또는 변환된 데이터여야 합니다.

알고리즘의 출력에서 우리는 "누적 비용 행렬"(그림에 있는 로컬 거리 행렬뿐만 아니라)을 얻었지만 메서드는 오른쪽 아래 셀의 값을 반환했습니다(구성에 따라 전체 행렬의 최대값). 이제 경로를 찾으려면 가장 작은 값을 가진 옵션을 선택할 때마다 셀(n,m)에서 셀(1,1)로 이동하면 됩니다.

 1 : path[] <- new array
2 : i =rows(dtw)
3 : j =columns(dtw)
4 : while (i> 1 ) & (j> 1 ) do
5 :     if (i == 1 ) then
6 :       j = j- 1
7 :     else if (j == 1 ) then
8 :       i = i- 1
9 :     else
10 :     if dtw(i- 1 ;j) == min{dtw(i- 1 ;j); dtw(i;j- 1 ); dtw(i- 1 ; j- 1 )} then 
11 :        i = i- 1
12 :     else if dtw(i;j- 1 ) == min{dtw(i- 1 ;j); dtw(i;j- 1 ); dtw(i- 1 ;j- 1 )} then
13 :        j = j- 1
14 :     else
15 :     i = i- 1 ; j = j- 1
16 :     end if
17 :   path:add(i;j)
18 :   end if
19 : end while
20 : return path
 
결과적으로 경로 배열에는 한 신호를 다른 신호로 변환하기 위한 최적의 경로가 포함됩니다. 어떤 방향으로든 할 수 있습니다.
 
신호 유사도는 행렬의 우측 하단 셀의 값에 의해 결정되며, 클수록 클수록 신호의 차이가 강해진다.
 
alsu : 신호의 유사도는 행렬의 우측하단 셀의 값에 의해 결정되며, 크기가 클수록 신호의 차이가 크다.
네, 감사합니다. 그들은 그것을 아주 명료하게 설명했습니다. 또 다른 질문: 데이터를 정규화하거나 동일한 순서로 가져올 필요가 있습니까? 결과에 영향을 줍니까?
 
IgorM :
네, 감사합니다. 그들은 그것을 아주 명료하게 설명했습니다. 또 다른 질문: 데이터를 정규화하거나 동일한 순서로 가져올 필요가 있습니까? 결과에 영향을 줍니까?
dtw[n][m]은 스케일에 따라 다르므로 쌍별 비교가 많으면 스케일링하고 중앙에 배치하는 것이 좋습니다.