Karşılaştırılan bir aralık için maksimum ve minimum sayıları nasıl tanımlarım? Örneğin, Shane tarafından aşağıdaki film derecelendirmelerine sahibim; [5, 5, 5, 5, 5, 5] ve Jaycee'nin derecelendirme listesi; [1, 1, 1, 1, 1, 1, 1], 5 yıldız dışındalar. Bunların bir sözlükten .values () olduğunu ve filmlerin her bir liste için sıraya dizildiğini varsayalım. o 5 ila 1. Bu yapılırdı nasıl gibi, muhtemelen, oran düşük sonuna yakın çevresinde 0,5 olması gerekirkenAralıktaki sayı listesi arasındaki benzerlik?
from math import *
def square_rooted(x):
return round(sqrt(sum([a*a for a in x])),3)
def cosine_similarity(x,y):
numerator = sum(a*b for a,b in zip(x,y))
denominator = square_rooted(x)*square_rooted(y)
return round(numerator/float(denominator),3)
print cosine_similarity([5, 5, 5, 5, 5, 5, 5], [1, 1, 1, 1, 1, 1, 1])
çıkışı 1.0:
aşağıdaki işlevleri kullanarak
?
Bundan sonra, sayıların benzerliğine göre doğru bir şekilde 0,0 ile 1,0 arasında bir çıktı verecek başka bir yöntem var mı? –
Hmm, bu "benzerlik" ile ne demek istediğine bağlı olacaktı ... ama bana göre istediğin, yönünden bağımsız bir benzerlik - sadece değere dayalı. Değer benzerliğinizin gerçekte nasıl davranmasını istersiniz? – Ian
Sayıların farkına dayanan benzerlik derecelendirmesi düşünüyordum, oran o kadar yüksek, –