2010-04-24 33 views
6

Tôi hiện đang làm việc với các đối tượng Người dùng - mỗi đối tượng có nhiều đối tượng Mục tiêu. Đối tượng Mục tiêu không phải là Người dùng cụ thể, tức là Người dùng có thể chia sẻ cùng một Mục tiêu. Tôi đang cố gắng thời trang một cách để tính "tỷ lệ phần trăm tương tự" giữa hai Người dùng ... (ví dụ: tính đến số Mục tiêu họ chia sẻ cũng như số Mục tiêu họ không chia sẻ) Có ai có kinh nghiệm với loại này không tình hình? Tôi đang sử dụng Grails với Mysql nếu điều đó là hữu ích.Cách hiệu quả để tính phần trăm tương tự giữa các tập dữ liệu

Cảm ơn

Trả lời

13

Cách tiêu chuẩn để làm điều này là tương tự Jaccard. Nếu A là tập hợp các mục tiêu của người sử dụng đầu tiên và B là tập hợp các mục tiêu của người dùng thứ hai, sự tương đồng Jaccard là:

#(A intersect B)/#(A union B) 

Đây là số bàn thắng mà họ chia sẻ chia cho tổng số phiếu biểu quyết cả hai đã cùng nhau (đếm các mục tiêu mà họ chia sẻ chỉ một lần). Vì vậy, nếu người dùng đầu tiên có mục tiêu A = {1,2,3} và người dùng thứ hai có mục tiêu B = {2,4} thì đó là:

A intersect B = {2} 
A union B = {1,2,3,4} 

#(A intersect B)/#(A union B) = 1/4 

Tính tương đồng của Jaccard luôn ở giữa 0 (họ chia sẻ không có bàn thắng) và 1 (họ có mục tiêu tương tự), vì vậy bạn có thể nhận được một tỷ lệ phần trăm bằng cách nhân nó bằng 100.

http://en.wikipedia.org/wiki/Jaccard_index

+0

Làm việc một cách hoàn hảo, cảm ơn bạn rất nhiều – RyanLynch

Các vấn đề liên quan