Trăn tương tự jaccard

Xin chào mọi người. Lâu rồi mới ngoi lên. Và trong bài này mình TOÁN sẽ viết về 1 thuật được ứng dụng khá nhiều trong các chủ đề AI hay ML là Giải thuật Jaccard[hay gọi tiếng Anh là Jaccard Index]. Để tag ML vào bài này cũng hơi láo nhưng bí quá chả biết tag gì. Mọi người bỏ qua cho mình

Khái niệm

Giải thuật Jaccard chỉ mục, hay còn gọi là giải thuật tỷ lệ giữa phần giao và phần hợp của 2 tập tin [có thể gọi tắt hơn nữa nhưng mà…. ], là 1 giải thuật được đưa ra bởi nhà Toán học Pháp Paul Jaccard. Như đã nói ở trên, giải thuật này là kết quả tính toán độ tương đồng giữa giao của 2 tập hợp và hợp của 2 tập hợp, được tính toán như sau

J[A,B]=∣A∩B∣∣A∪B∣=∣A∩B∣∣A∣+∣B∣−∣A∩B∣J[A,B]=frac{. A∩B. }{. A∪B. }=frac{. A∩B. }{. A. +. B. -. A∩B. }

J[A,B]=ABAB=A+BABAB

If file

AA

A and file

BB

B all empty, default

J[A,B]=1J[A,B] = 1

J[A,B]=1. Giá trị của

J[A,B]J[A,B]

J[A,B] luôn phải thoả mãn điều kiện sau:

0⩽J[A,B]⩽10⩽J[A,B] ⩽1

0J[A,B]1

Độ rời rời Jaccard lại là để đo tỷ lệ rời rời giữa giao và hợp của 2 tập hợp, được tính bằng cách

dJ[A,B]=1−J[A,B]=∣A∪B∣−∣A∩B∣∣A∪B∣d_J[A, B]=1-J[A, . A∪B. -. A∩B. }{. A∪B. }

dJ[A,B]=1J[A,B]=ABABAB

Ý nghĩa

Gorge stack công thức toán trên có ý nghĩa gì. Please look after image

Trong ảnh chúng ta có 2 vùng. vùng xanh là vùng đối tượng thật[gọi là kết quả], vùng đỏ là vùng dự đoán. Muốn dự đoán tốt thì cần phải nhận diện vật thể tốt. 2 vùng này sẽ luôn giao tiếp với nhau và phân vùng sẽ giảm dần. Còn diện tích vùng chung của 2 vùng sẽ tăng dần. Ở đây đã xác định rõ ràng các vùng chung càng lớn thì độ chính xác càng cao, nhưng kéo theo tổng phân tích đó sẽ giảm dần. Chính vì thế J[A, B] càng lớn thì phần tử số sẽ lớn, phần mẫu số sẽ nhỏ. Và phân số này sẽ lớn nhất bằng 1 khi 2 vùng màu xanh đỏ khớp với nhau và nhỏ nhất bằng 0 khi 2 vùng này hoàn toàn không giao tiếp với nhau

Văn phong có vẻ hơi lằng nhằng nhưng bên trên chính là ứng dụng của Jaccard trong phát hiện đối tượng. Ngoài ra, Jaccard cũng có thể được ứng dụng trong Hệ thống khuyến nghị. Có 3 danh sách diễn viên sau.

AA

A ={Haruka Kudo, Okuyama Kazusa, Noa Tsurushima},

BB

B ={Okuyama Kazusa, Noa Tsurushima, Chika Osaki},

CC

C ={Haruka Kudo, Sakurako Okubo, Hiroe Igeta}. Ta has.

Phần GiaoPhần Hợp A∩BA∩BAB ={Okuyama Kazusa, Noa Tsurushima}A∪BA∪BAB ={Haruka Kudo, Okuyama Kazusa, Noa Tsurushima, Chika Osaki}B∩CB∩CBC ={}B∪CB∪CBC ={Okuyama Kazusa, Noa Tsurushima, Chika Osaki, Haruka Kudo, Sakurako Okubo, Hiroe Igeta}A∩CA∩CAC ={Haruka Kudo}A∪CA∪CAC ={Okuyama Kazusa, Noa Tsurushima, Haruka Kudo, Sakurako Okubo, Hiroe Igeta}

See the following

J[A,B]=2/4=0. 5J[A,B]=2/4=0. 5

J[A,B]=2/4=0.5 ,

J[B,C]=0/6=0J[B,C]=0/6=0

J[B,C]=0/6=0,

J[A,C]=1/5=0. 2J[A,C]=1/5=0. 2

J[A,C]=1/5=0.2 . Ta thấy điểm tương đồng giữa

AA

A

BB

B cao hơn nên có thể lấy diễn viên từ danh sách

AA

A để gợi ý cho

BB

B and back.

Khai triển với mã 1

Và sau 1 hồi lý thuyết Toán ở trên[và vài phút để các bạn tra cứu mấy cái tên trên nữa

], chúng ta sẽ cùng thử xem sự phát triển của Jaccard tại . Và lần này chúng ta sẽ quay lại 2 ví dụ trên nhưng thứ tự sẽ khác đi. 3 danh sách kia sẽ được chuyển thành 3 mảng A, B, C. Nhiệm vụ chúng ta cần làm ở đây là triển khai thuật toán và đưa ra các cặp có mức độ tương đồng cao nhất.

Đầu tiên là việc cài đặt thuật toán. Việc này khá đơn giản [thực ra hàm jaccard cũng có sẵn trong python rồi, nhưng chúng ta sẽ thử cài đặt từ đầu]

1

2

3

4

5

def jaccard_similarity[list1, list2]:

    s1 = set[list1]

    s2 = set[list2]

    return len[s1.giao lộ . [s2]] / len[s1.union[s2]]

 

Sau khi có hàm trên, chúng ta sẽ thử nghiệm danh sách 2 như sau

1

2

3

4

A = ['Haruka Kudo', 'Okuyama Kazusa', 'Noa Tsurushima']

B = ['Okuyama Kazusa', 'Noa Tsurushima', 'Chika Osaki']

print["{}: {:.4f}".< . span class="token builtin">format[detection.image_path, jaccard_index]]

 

Chủ Đề