Medidas de similaridade entre curvas?

17

Gostaria de calcular a medida de semelhança entre dois conjuntos de pontos ordenados - os de Usuário em comparação com os de Professor :

! [Exemplo] (http://i50.tinypic.com/2uj0580.jpg)

Os pontos são curvas no espaço 3D, mas eu estava pensando que o problema seria simplificado se os plotasse em duas dimensões, como na figura. Se os pontos se sobrepuserem, a similaridade deve ser 100%.

Alex
fonte
Você precisa considerar o dimensionamento, rotação e / ou conversão?
Nico
Não, não preciso levar em consideração.
728 Alex
ou seja, eu aplicarei, cuide disso.
Alex #

Respostas:

11

Você está comparando trajetórias ou curvas . Este é um tópico estudado. A análise de procrustes e a distorção dinâmica do tempo , como diz o EMS, são ferramentas do comércio. Depois de alinhar as curvas, você deseja medir a distância, diga a distância de Fréchet . Se você quiser compartilhar alguns de seus dados, poderíamos fazer uma descoberta deles mesmos.

Leitura relevante:

Se você desconsiderar a dimensão temporal:

Você pode ajustar o Usuário e o Professor para multivariadas densidades Gaussianas e encontrar o volume de seus produtos - isso é bastante fácil. Se você quiser mais precisão, poderá usar uma estimativa de densidade não paramétrica.

Emre
fonte
Obrigado Emre pela sua sugestão! Atualizei o problema - acho que agora pode ser mais simples, então dê uma olhada.
Alex #
Você poderia ajustar o Usuário e o Professor para multivariadas densidades Gaussianas e encontrar o volume de seu produto - isso é bastante fácil. Você poderia, por favor, me indicar os recursos corretos para aprender isso? Realmente novato aqui.
Sibbs Gambling
A distância euclidiana será suficiente para curvas alinhadas?
Vladimir Chupakhin
I utilizados coeficientes de correlação para a comparação de semelhanças e prender o resultado entre 0 e 1.
M.kazem Akhgary
3

Você pode considerar a distância de Procrustes ou alguma distância com base na distorção dinâmica do tempo (mesmo que uma de suas dimensões não seja "tempo" por si só, você ainda pode usar essa ideia de transformação). Veja este trabalho recente em Tracklets para um caso de uso ilustrativo de distorção dinâmica do tempo para medir a similaridade entre curvas espaciais 3D esculpidas por trajetórias de pontos em vídeos.

Existem muitas bibliotecas com cálculos de distância Procrustes embutidos, como Matlab, ou a biblioteca PyGeometry para Python.

ely
fonte
2

A postagem original solicitou uma métrica entre os pontos PEDIDOS em 3D. A única métrica desse tipo é a distância de Frechet. Não houve menção de tempo como uma das dimensões, portanto, eu assumiria que todas as dimensões têm unidades de distância (isto é, as unidades não são misturadas). Isso pode ser feito modificando uma função recentemente carregada na troca de arquivos do MathWorks (cálculo da distância Frechet: http://www.mathworks.com/matlabcentral/fileexchange/38714 ). Essas rotinas foram escritas para pontos no plano, mas a extensão para os pontos 3D é simples.

Rich Kenefic
fonte
1
Tem certeza de que a distância Frechet está entre pares ordenados? a página da wikipedia diz que um ponto em um caminho pode ser comparado a vários pontos em outro. Além disso, certamente há mais de uma dessas métricas. E a soma das distâncias entre pares ordenados?
naught101
1

Distância Hausdorff pode ser o que você está procurando. Hausdorff A distância entre dois conjuntos de pontos e é definida como, .Y d H ( X , Y ) = max { sup x X inf y Y | | x - y | | , Sup y Y inf x X | | x - y | | }XYdH(X,Y)=max{supxXinfyY||xy||,supyYinfxX||xy||}

TenaliRaman
fonte
Não acho que essa seja uma abordagem muito tratável. A menos que você pretenda aproximar isso, substituindo todos os e por e .. mas a distância de Hausdorff não será bem aproximada por eles em muitos casos. Como você propõe computar (em software) essas distâncias? inf max minsupinfmaxmin
ely
1
@EMS Existem duas maneiras de fazer isso: 1. considerar e como conjuntos de pontos discretos, tornar as coisas mais simples 2. ou tentar criar alguma forma de casco convexo para cada conjunto de pontos (não tenho certeza se isso é necessário) e algo como [this] [1] poderia ser usado para calcular aproximadamente a distância. [1]: cg.cs.uni-bonn.de/aigaion2root/attachments/guthe-2005-fast.pdfYXY
TenaliRaman
Obrigado pelo link, eu só tinha visto a distância de Hausdorff em visão computacional no livro de Tony Chan. É legal ver mais abordagens computacionais.
ely
1

A similaridade é a quantidade que reflete a força do relacionamento entre dois objetos ou dois recursos. Essa quantidade geralmente está no intervalo de -1 a +1 ou normalizada em 0 a 1. Do que você precisa calcular a distância de dois recursos por um dos métodos abaixo:

  1. Distância de correspondência simples
  2. Distância de Jaccard
  3. Distância de Hamming
  4. Coeficiente de Jaccard
  5. coeficiente de correspondência simples

Para a linha ... você pode representá-lo pelas propriedades de ângulo (a) e comprimento (l) ou L1 = P1 (x1, y1), P2 (x2, y2) abaixo é a semelhança com a e l.

agora meça o ângulo para ângulos e comprimentos

  • A_user = 20 e Length_User = 50
  • A_teacher30 e Length_Teacher = 55
  • Agora, normalize os valores.

Usando distância euclidiana

similarity = SquareRoot ((A_user - A_teacher30) ^ 2 + (Length_User - Length_Teacher) ^ 2)

fornece a medida de similaridade. Você também pode usar os métodos mencionados acima com base no problema e nos recursos.

sso
fonte