2010-11-20 5 views
17

제 영어가 능숙하지 않아서 제 글쓰기에 인내하십시오.추천 엔진을 구현하려면 어떻게해야합니까?

프로그래머는 추천 시스템이나 관련 기반 시스템 아래에서 구현되는 알고리즘 또는 기계 학습 인텔리전스에 대해 알아야합니다. 예를 들어 가장 확실한 예는 아마존에서 나온 것입니다. 그들에게는 정말 좋은 추천 시스템이 있습니다. 그들은 알 수 : 함께 그런 사람들의 몇 퍼센트 : 당신이 를 좋아하는 경우에, 당신은 또한 것을, 또는 다른 뭔가를 좋아 있습니다.

아마존은 큰 웹 사이트이고 그들은 두뇌와 돈을이 시스템에 투자했습니다. 그러나 매우 기본적인 핵심에서 우리는 데이터베이스 내에서 어떻게 구현할 수 있습니까? 한 물체가 다른 물체와 어떻게 관련되어 있는지를 어떻게 확인할 수 있습니까? 어떻게 이런 종류의 것을 처리하는 통계 단위를 만들 수 있습니까?

누군가 알고리즘을 지적 해 주시면 감사하겠습니다. 또는 기본적으로 우리가 배울 수있는 좋은 직접적인 참고 문헌/책을 지적하십시오. 다들 감사 해요!

+0

아마존의 [특허] (http://www.google.com/patents/US7113917)는 자신의 접근 방식에 대해 자세히 설명합니다. – arao6

답변

18

두 가지 유형의 권장 사항 엔진이 있습니다.

가장 간단한 것은 항목 기반입니다. 즉, "제품 A를 구입 한 고객은 또한 제품 B를 구입했습니다"입니다. 이것은 쉽게 구현할 수 있습니다. 스파 스 대칭 행렬 nxn을 저장하십시오 (n은 항목 수). 각 요소 (m [a] [b])는 누구나 항목 'b'와 함께 항목 'a'를 (를) 구입 한 횟수입니다.

다른 사용자 기반입니다. 그것은 "당신 같은 사람들은 종종 이런 것들을 좋아합니다"입니다. 이 문제에 대한 가능한 해결책은 k-means 클러스터링입니다. 비슷한 맛을 가진 사용자가 동일한 클러스터에 배치되고 동일한 클러스터의 사용자를 기반으로 제안을하는 클러스터 집합을 구성합니다.

더 나은 해결책이지만 더 복잡한 방법은 제한된 볼츠만 기계라고하는 기술입니다. 그들에 대한 소개가 있습니다 here

+4

@HTa : @dan_waterworth가 그린 "고객 유사성"과 "제품 유사성"의 구분은 권장 엔진 전략 중 가장 기본적인 구분선입니다. 그러나 "제한된 볼츠만 컴퓨터"및 "k- 평균 클러스터링"은 "사용하려는 모든 컴퓨터 학습 기술"의 독립 실행 형으로 간주되어야합니다. – isomorphismes

0

나는 knowledge base systems에 대해 이야기합니다. 나는 프로그래밍 언어 (어쩌면 LISP)를 기억하지 못하지만 구현이있다. 또한 OWL을보십시오.

3

같이 보일 수 있던 첫 번째 시도 :

//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})); 

먼저 I 제품의 각 쌍은 함께 구입 한 빈도를 계산하고 제품 별 나는 그룹을 상단 (20) 다른 제품을 함께 구입 선택 . 결과는 제품 ID로 사전에 지정된 일종의 사전에 넣어야합니다.

이렇게하면 데이터베이스가 너무 느려지거나 너무 많은 메모리가 필요할 수 있습니다.

0

오픈 소스 솔루션 또는 mag3llan.com과 같은 SaaS 솔루션을 찾고있는 경우 도 있습니다.

관련 문제