2010-11-20 36 views
17

Hãy kiên nhẫn với bài viết của tôi, vì tiếng Anh của tôi không thành thạo.Tôi làm cách nào để triển khai công cụ đề xuất?

Là một lập trình viên, tôi muốn tìm hiểu về thuật toán hoặc thông minh học máy, được triển khai bên dưới các hệ thống đề xuất hoặc các hệ thống dựa trên liên quan. Ví dụ, ví dụ rõ ràng nhất sẽ là từ Amazon. Họ có một hệ thống đề xuất thực sự tốt. Họ biết: nếu bạn thích số này, bạn cũng có thể thích rằng hoặc một cái gì đó khác như: Tỷ lệ phần trăm người như điều nàyrằng cùng nhau.

Tất nhiên tôi biết Amazon là một trang web lớn và họ đầu tư rất nhiều bộ não và tiền bạc vào các hệ thống này. Nhưng, trên cốt lõi rất cơ bản, làm thế nào chúng ta có thể thực hiện một cái gì đó như thế trong cơ sở dữ liệu của chúng ta? Làm thế nào chúng ta có thể xác định một đối tượng liên quan đến nhau như thế nào? Làm thế nào chúng ta có thể xây dựng một đơn vị thống kê xử lý loại điều này?

Tôi đánh giá cao nếu ai đó có thể chỉ ra một số thuật toán. Hoặc, về cơ bản, chỉ ra một số tài liệu tham khảo/sách trực tiếp tốt mà tất cả chúng ta đều có thể học hỏi. Cảm ơn tất cả!

+0

[bằng sáng chế] của Amazon (http://www.google.com/patents/US7113917) mô tả cách tiếp cận của họ theo chiều sâu. – arao6

Trả lời

18

Có 2 loại công cụ đề xuất khác nhau.

Đơn giản nhất là mục dựa trên nghĩa là "khách hàng đã mua sản phẩm A cũng đã mua sản phẩm B". Điều này rất dễ thực hiện. Lưu trữ một ma trận đối xứng thưa thớt nxn (trong đó n là số mặt hàng). Mỗi phần tử (m [a] [b]) là số lần mọi người đã mua mục 'a' cùng với mục 'b'.

Khác là dựa trên người dùng. Đó là "những người như bạn thường thích những thứ như thế này". Một giải pháp có thể cho vấn đề này là phân cụm k. tức là xây dựng một tập hợp các cụm nơi người dùng có hương vị tương tự được đặt trong cùng một cụm và đưa ra đề xuất dựa trên người dùng trong cùng một cụm.

Một giải pháp tốt hơn, nhưng giải pháp thậm chí còn phức tạp hơn là kỹ thuật được gọi là Máy hạn chế Boltzmann. Có giới thiệu về họ here

+4

@HTa: Sự khác biệt giữa "sự giống nhau của khách hàng" và "tương tự sản phẩm" mà @dan_waterworth rút ra là đường phân chia cơ bản nhất trong số các chiến lược công cụ đề xuất. Tuy nhiên, "các máy boltzmann bị hạn chế" và "cụm từ k" có thể được xem như là các trình bổ sung cho "bất kỳ kỹ thuật học máy nào bạn muốn sử dụng". Tương tự như khách hàng hoặc tương tự sản phẩm có thể được thực hiện với ma trận và có thể được thực hiện với A.I./stats/M.L. Bạn có thể đọc về Wikipedia. – isomorphismes

0

Tôi nghĩ, bạn nói về knowledge base systems. Tôi không nhớ ngôn ngữ lập trình (có thể là LISP), nhưng có những triển khai. Ngoài ra, hãy xem OWL.

3

Một nỗ lực đầu tiên có thể nhìn như thế này:

//First Calculate how often any product pair was bought together 
//The time/memory should be about Sum over all Customers of Customer.BoughtProducts^2 
Dictionary<Pair<ProductID,ProductID>> boughtTogether=new Dictionary<Pair<ProductID,ProductID>>(); 
foreach(Customer in Customers) 
{ 
    foreach(product1 in Customer.BoughtProducts) 
     foreach(product2 in Customer.BoughtProducts) 
      { 
       int counter=boughtTogether[Pair(product1,product2)] or 0 if missing; 
       counter++; 
       boughtTogether[Pair(product1,product2)]=counter; 
      } 
} 

boughtTogether.GroupBy(entry.Key.First).Select(group.OrderByDescending(entry=>entry.Value).Take(10).Select(new{key.Second as ProductID,Value as Count})); 

Trước tiên tôi tính toán mức độ thường xuyên mỗi cặp sản phẩm đã được mua lại với nhau, và sau đó tôi nhóm chúng bằng các sản phẩm và chọn top 20 sản phẩm khác mua với nó . Kết quả sẽ được đưa vào một số loại từ điển được khóa bằng ID sản phẩm.

Điều này có thể quá chậm hoặc tốn quá nhiều bộ nhớ cho cơ sở dữ liệu lớn.

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