2010-11-20 19 views
17

私の英語は堪能ではないので、私の執筆には忍耐強くしてください。推奨エンジンを実装するにはどうすればよいですか?

プログラマーとして、推薦システムや関連ベースのシステムの下で実装されているアルゴリズムや機械学習知能について学びたいと思います。たとえば、最も明白な例はAmazonからのものです。彼らは本当に良い推薦システムを持っています。彼らは知ってもらう:この一緒そのような人々の何パーセント:あなたはこのが好きなら、あなたもこと、または他のようなものを好むかもしれません。

もちろん私はAmazonが大きなウェブサイトであり、これらのシステムに多くの脳と資金を投入したことを知っています。しかし、非常に基本的なコアでは、私たちのデータベース内にどのようにそのようなものを実装できますか?あるオブジェクトが他のオブジェクトとどのように関連しているかをどのように識別できますか?このようなことを処理する統計ユニットを構築するにはどうすればよいですか?

誰かがアルゴリズムを指摘できるかどうかは分かります。あるいは、基本的に、私たちがすべて学ぶことのできる良い直接参照/本を指摘してください。皆さん、ありがとうございました!

+0

アマゾンの[patent](http://www.google.com/patents/US7113917)では、彼らのアプローチを詳細に説明しています。 – arao6

答えて

18

推奨エンジンは2種類あります。

最も簡単なのはアイテムベースです(つまり、商品Aを購入した顧客も商品Bを購入しました)。これは簡単に実装できます。スパースな対称行列nxn(nはアイテムの数)を格納します。各要素(m [a] [b])は、アイテム「a」をアイテム「b」と共に購入した回数です。

もう1つはユーザーベースです。それは「あなたのような人がよくこのようなものを好む」ということです。この問題に対する可能な解決策は、k平均クラスタリングである。類似した好みのユーザが同じクラスタに配置され、同じクラスタ内のユーザに基づいて提案を行うクラスタのセットを構築する。

もっと良い解決策ですが、さらに複雑なものは、制限付きボルツマンマシンと呼ばれる技術です。あなたに紹介がありますhere

+4

@HTa:@dan_waterworthが描く「顧客の類似性」と「製品の類似性」の違いは、推奨エンジン戦略の中で最も基本的な分割線です。 「制限付きボルツマンマシン」と「k-meansクラスタリング」は、「どのような機械学習技術を使用したいのか」のスタンドインとして理解してください。 顧客類似性または製品類似性のいずれかをマトリックスで行うことができ、いずれかをA.I./stats/M.L.あなたはWikipediaでどちらかについて読むことができます。 – 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ソリューションをお探しの場合は、prediction.ioもあります。

関連する問題