Re:Universal Method to Sort Complex Information Found
by bunderbunder on Monday August 13, 2018 @04:14PM
(#17753240)
It's a rather large set, but it's got some noteworthy holes. Cosine distance, for example.
[ Parent
| on HN ]
Re:Universal Method to Sort Complex Information Found
by DoctorOetker on Monday August 13, 2018 @06:20PM
(#17754039)
my gut feeling tells me - ln((1+Similarity_cosine(A,B))/2) would satisfy the triangle inequality.
Re:Universal Method to Sort Complex Information Found
by tlb on Tuesday August 14, 2018 @12:46AM
(#17755650)
It produces negative distances, which disqualifies it as a metric.
Re:Universal Method to Sort Complex Information Found
by Y_Y on Tuesday August 14, 2018 @06:19AM
(#17756638)
For a Riemannian metric yes, but a lot of physics gets done in Lorentzian (psuedo-)metric spaces.
Re:Universal Method to Sort Complex Information Found
by DoctorOetker on Tuesday August 14, 2018 @09:39AM
(#17757747)
how does it produce negative distances?
cosine similarity is [1,-1], so add one [2,0], now halve [1,0] now take logarithm [0,-inf] finally negate [0,+inf]
?
Re:Universal Method to Sort Complex Information Found
by tlb on Tuesday August 14, 2018 @12:26PM
(#17759320)
Ah, I mistook the - at the beginning for a separator.
It does fail the triangle inequality, though, as the following python snippit demonstrates:
import numpy as np
def randomvec():
return np.random.rand(4)*2-1
def cossim(a, b):
return np.dot(a,b) / np.sqrt(np.dot(a, a) * np.dot(b, b))
def metric(a, b):
return -np.log((1+cossim(a, b))/2)
def main():
for i in range(20):
a = randomvec()
b = randomvec()
c = randomvec()
a2b = metric(a, b)
b2c = metric(b, c)
a2c = metric(a, c)
print a2b, b2c, a2c
if a2b + b2c < a2c:
print ' *** fails triangle inequality'
main()
Re:Universal Method to Sort Complex Information Found
by DoctorOetker on Tuesday August 14, 2018 @03:05PM
(#17760900)
good catch! upvoted
Re:Universal Method to Sort Complex Information Found
by DoctorOetker on Tuesday August 14, 2018 @11:53AM
(#17759042)
I guess the best conversion of cosine similiarity to distance would of course be d(A,B) = arcCos(Cosine_similiarity(A,B)), i.e. the angle between the 2 directions, which would have the property that subdividing a geodesic arc and calculating the sum of distances along the subdivision results in the same distance as the start and end point.