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.

Maomé
fonte

Respostas:

15

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

11+d(p1,p2)

é comumente usado.

TrynnaDoStat
fonte
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

Exceção não tratada
fonte
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.

Sycorax says Reinstate Monica
fonte
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.

wij
fonte
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.

Brad
fonte