Tôi không cho rằng hiệu suất rất nhiều ở đây, nhưng tôi không thể cưỡng lại được. Chức năng zip [] hoàn toàn phục hồi cả hai vectơ [thực sự nhiều hơn một ma trận] chỉ để lấy dữ liệu theo thứ tự "pythonic". Sẽ rất thú vị khi thời gian thực hiện các loại hạt và bu-lông:
import math
def cosine_similarity[v1,v2]:
"compute cosine similarity of v1 to v2: [v1 dot v2]/{||v1||*||v2||]"
sumxx, sumxy, sumyy = 0, 0, 0
for i in range[len[v1]]:
x = v1[i]; y = v2[i]
sumxx += x*x
sumyy += y*y
sumxy += x*y
return sumxy/math.sqrt[sumxx*sumyy]
v1,v2 = [3, 45, 7, 2], [2, 54, 13, 15]
print[v1, v2, cosine_similarity[v1,v2]]
Output: [3, 45, 7, 2] [2, 54, 13, 15] 0.972284251712
Điều đó vượt qua nhiễu giống như C của việc trích xuất các phần tử một lần, nhưng không sao chép mảng số lượng lớn và làm cho mọi thứ quan trọng được thực hiện trong một vòng cho vòng lặp và sử dụng một căn bậc hai.
ETA: Cập nhật cuộc gọi in để trở thành một chức năng. .
CPYThon 2.7.3 trên bộ đôi lõi 2 3.0GHz:
>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
Vì vậy, cách không có tính cách nhanh hơn khoảng 3,6 lần trong trường hợp này.
Được tạo ra: Tháng 6-13, 2021 | Cập nhật: tháng 11-26, 2021 Khi chúng ta xử lý các tencors n-chiều có hình dạng [M, N], chúng ta có thể sử dụng hàm
3 để tính toán độ tương tự cosin giữa hai danh sách trong Python>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
4 để tính toán độ tương tự cosine giữa hai danh sách trong Python>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
5 để tính toán độ tương tự cosine giữa hai danh sách trong Python>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
6 để tính toán độ tương tự cosin giữa hai danh sách trong Python>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
7 từ mô-đun from scipy import spatial
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine[List1, List2]
print[result]
6 để tìm sự tương đồng cosine.>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
Danh sách được chuyển đổi thành tenxơ bằng mô -đun
from scipy import spatial
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine[List1, List2]
print[result]
9.Sử dụng mô -đun >>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
3 để tính toán độ tương tự cosin giữa hai danh sách trong Python
>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
Độ tương tự cosine đo lường sự giống nhau giữa các danh sách vectơ bằng cách tính góc cosin giữa hai danh sách vectơ. Nếu bạn xem xét hàm cosin, giá trị của nó ở 0 độ là 1 và -1 ở 180 độ. Điều này có nghĩa là đối với hai vectơ chồng chéo, giá trị của cosin sẽ tối đa và tối thiểu cho hai vectơ đối diện chính xác.
Ví dụ,
from scipy import spatial
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine[List1, List2]
print[result]
Output:
0.9720951480078084
Sử dụng mô -đun >>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
4 để tính toán độ tương tự cosine giữa hai danh sách trong Python
>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
Hàm
from scipy import spatial
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine[List1, List2]
print[result]
1 tính toán sản phẩm chấm của hai vectơ được truyền dưới dạng tham số. Hàm from scipy import spatial
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine[List1, List2]
print[result]
2 trả về định mức vectơ.Chúng ta có thể sử dụng các chức năng này với công thức chính xác để tính toán độ tương tự cosin.
Ví dụ,
from numpy import dot
from numpy.linalg import norm
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = dot[List1, List2]/[norm[List1]*norm[List2]]
print[result]
Output:
0.9720951480078084
Nếu có nhiều hoặc một danh sách các vectơ và vectơ truy vấn để tính toán độ tương tự cosine, chúng ta có thể sử dụng mã sau.
import numpy as np
List1 =np.array[[[ 4, 45, 8, 4],
[ 2, 23, 6, 4]]]
List2=np.array[[ 2, 54, 13, 15]]
similarity_scores = List1.dot[List2]/ [np.linalg.norm[List1, axis=1] * np.linalg.norm[List2]]
print[similarity_scores]
Output:
[0.98143311 0.99398975]
Sử dụng mô -đun >>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
5 để tính toán độ tương tự cosine giữa hai danh sách trong Python
>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
Trong mô-đun
>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
5, có một hàm được xây dựng gọi là from scipy import spatial
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine[List1, List2]
print[result]
5 để tính toán độ tương tự cosin.Xem mã bên dưới.
from sklearn.metrics.pairwise import cosine_similarity,cosine_distances
A=np.array[[10,3]]
B=np.array[[8,7]]
result=cosine_similarity[A.reshape[1,-1],B.reshape[1,-1]]
print[result]
Output:
[[0.91005765]]
Sử dụng mô -đun >>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
6 để tính toán độ tương tự cosin giữa hai danh sách trong Python
>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
Khi chúng ta xử lý các tencors n-chiều có hình dạng [M, N], chúng ta có thể sử dụng hàm
from scipy import spatial
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine[List1, List2]
print[result]
7 từ mô-đun >>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
6 để tìm sự tương đồng cosine.Ví dụ,
>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
0Output:
>>> timeit.timeit["cosine_similarity[v1,v2]",setup="from __main__ import cosine_similarity, v1, v2"]
2.4261788514654654
>>> timeit.timeit["cosine_measure[v1,v2]",setup="from __main__ import cosine_measure, v1, v2"]
8.794677709375264
1Danh sách được chuyển đổi thành tenxơ bằng mô -đun
from scipy import spatial
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine[List1, List2]
print[result]
9.