如何实施推荐引擎?

时间:2010-11-20 09:50:06

标签: algorithm recommendation-engine

请耐心等待我的写作,因为我的英语不够熟练。

作为程序员,我想了解在推荐系统或基于相关系统下实现的算法或机器学习智能。例如,最明显的例子来自亚马逊。他们有一个非常好的推荐系统。他们知道:如果你喜欢这个,你可能也喜欢那个,或者其他类似的东西:有多少人喜欢这个和< em>那个在一起。

当然,我知道亚马逊是一个大型网站,他们在这些系统上投入了大量的资金和金钱。但是,在最基本的核心上,我们如何在数据库中实现类似的东西呢?我们如何识别一个物体与其他物体的关系?我们如何建立一个处理这种事情的统计单位?

如果有人能指出一些算法,我会很感激。或者,基本上,指出一些我们都可以学习的好的直接参考/书籍。谢谢大家!

4 个答案:

答案 0 :(得分:18)

这是两种不同类型的推荐引擎。

最简单的是基于项目,即“购买产品A的客户也购买了产品B”。这很容易实现。存储稀疏对称矩阵nxn(其中n是项目数)。每个元素(m [a] [b])是任何人购买项目'a'和项目'b'的次数。

另一个是基于用户的。那就是“像你这样的人经常喜欢这样的东西”。该问题的可能解决方案是k均值聚类。即构建一组集群,其中具有相似品味的用户被放置在同一集群中,并根据同一集群中的用户提出建议。

更好的解决方案,但更复杂的解决方案是一种名为Restricted Boltzmann Machines的技术。有一个介绍here

答案 1 :(得分: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}));

首先,我计算每对产品的购买频率,然后我按产品分组,并选择使用它购买的前20个其他产品。结果应该放在某种由产品ID键入的字典中。

对于大型数据库来说,这可能会变得太慢或耗费太多内存。

答案 2 :(得分:0)

我想,你谈的是knowledge base systems。我不记得编程语言(也许是LISP),但有实现。另外,请查看OWL

答案 3 :(得分:0)

如果您正在寻找开源解决方案或像prediction.io这样的SaaS解决方案,那么还有mag3llan.com