Como posso converter a distância (euclidiana) em pontuação de similaridade


13

Estou usando k significa agrupar para agrupar as vozes dos alto-falantes. Quando comparo um enunciado com os dados do alto-falante em cluster, obtenho distorção média (baseada na distância euclidiana). Essa distância pode estar na faixa de [0,] . Eu quero converter essa distância para uma pontuação de similaridade [0,1] . Por favor, me guie sobre como eu posso conseguir isso.

Respostas:


15

Se d(p1,p2) representa a distância euclidiana do ponto p1 ao ponto p2 ,

11+d(p1,p2)

é comumente usado.


Por favor me corrijam se eu estiver errado, se temos e Y = ( Y 1 , Y 2 , Y 3 , . . . , Y n ) onde cada x e y é de dimensão D . Então podemos definir semelhanças, como S i m i lX=(x1,x2,x3,...,xt)Y=(Y1,Y2,Y3,...,Yn)xyD .
Similarity=1ti=1t11+minDistance(xi,Y)
Muhammad

Entendo que o mais 1 no denominador é evitar dividir por erro zero. Mas descobri que o valor mais um afeta desproporcionalmente os valores de d (p1, p2) maiores que 1 e, finalmente, reduz significativamente a pontuação de similaridade. Há outra maneira de fazer isso? Talvez s = 1-d (p1, p2)
aamir23

9

Você também pode usar: ondeé a sua função distância desejada.1edistdist


Você pode fornecer algum livro / documentação de referência relacionados a esta equação em que você a encontrou? @Dougal
Justlife

@AnimeshKumarPaul Não escrevi esta resposta, apenas aprimorei sua formatação. Mas é freqüentemente usado como uma versão, por exemplo, de um "kernel RBF generalizado"; veja por exemplo aqui . Essa questão diz respeito à questão de saber se a saída é um kernel definido positivo; se você não se importa com isso, pelo menos, satisfaz uma noção intuitiva de similaridade de que pontos mais distantes são menos semelhantes.
Dougal

@ Justlife: pesquise no Google por esta "enciclopédia de distâncias" e escolha o resultado com o documento pdf.
Exceção não tratada

6

Parece que você deseja algo semelhante à semelhança de cosseno, que é em si uma pontuação de similaridade no intervalo de unidade. De fato, existe uma relação direta entre distância euclidiana e semelhança de cosseno!

||xx||2=(xx)T(xx)=||x||+||x||2||xx||.

While cosine similarity is

f(x,x)=xTx||x||||x||=cos(θ)
θxx

||x||=||x||=1,

||xx||2=2(1f(x,x))
and
f(x,x)=xTx,

so

1||xx||22=f(x,x)=cos(θ)
in this special case.

From a computational perspective, it may be more efficient to just compute the cosine, rather than Euclidean distance and then perform the transformation.


I'm confused by your notation here. Is x,x2 supposed to be xx2 (in which case I think the relation is incorrect, as it doesn't account for x or x), or something based on x,x? The cosine similarity I'm familiar with is simply xTx/(xx), though Wikipedia says the "angular similarity" 12πxTxxx is also sometimes called that.
Dougal

@Dougal Blah. Correct. I've revised to make it intelligible.
Sycorax says Reinstate Monica

Cool. Note though that since the OP said distances are unbounded, it seems like we don't have x=1. Also, your expansion of xx2 is mistaken; it should be x2+x22xTx, though the rest of your post handles it correctly. :)
Dougal

3

How about a Gaussian kernel ?

K(x,x)=exp(xx22σ2)

The distance xx is used in the exponent. The kernel value is in the range [0,1]. There is one tuning parameter σ. Basically if σ is high, K(x,x) will be close to 1 for any x,x. If σ is low, a slight distance from x to x will lead to K(x,x) being close to 0.


1
Note that this answer and @Unhandled exception's are very related: this is exp(γd(x,x)2), where that one [introducing a scaling factor] is exp(γd(x,x)), a Gaussian kernel with d as the metric. This will still be a valid kernel, though the OP doesn't necessarily care about that.
Dougal

0

If you are using a distance metric that is naturally between 0 and 1, like Hellinger distance. Then you can use 1 - distance to obtain similarity.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.