【问题标题】:How can I implement a recommendation engine?如何实现推荐引擎?
【发布时间】:2010-11-20 09:50:05
【问题描述】:

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

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

当然,我知道亚马逊是一个大网站,他们在这些系统上投入了大量的精力和金钱。但是,在最基本的核心上,我们如何在我们的数据库中实现类似的东西?我们如何确定一个对象与另一个对象的关系?我们如何构建一个处理这种事情的统计单元?

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

【问题讨论】:

  • 亚马逊的patent 深入描述了他们的方法。

标签: algorithm recommendation-engine


【解决方案1】:

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

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

另一个是基于用户的。那就是“像你这样的人经常喜欢这样的事情”。这个问题的一个可能的解决方案是 k-means 聚类。即构建一组集群,将口味相似的用户放在同一个集群中,并根据同一集群中的用户提出建议。

一种更好但更复杂的解决方案是一种称为受限玻尔兹曼机的技术。有他们的介绍here

【讨论】:

  • @HTa:@dan_waterworth 绘制的“客户相似度”和“产品相似度”之间的区别是推荐引擎策略中最基本的分界线。然而,“受限的 Boltzmann 机器”和“k-means 聚类”应该被视为“你想使用的任何机器学习技术”的替代品。客户相似度或产品相似度都可以用矩阵来完成,也可以用人工智能来完成。 /统计/ M.L.您可以在 Wikipedia 上阅读任何内容。
【解决方案2】:

第一次尝试可能如下所示:

//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 为键的字典中。

对于大型数据库,这可能会变得太慢或占用太多内存。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      如果您正在寻找开源解决方案或 SaaS 解决方案,例如 mag3llan.com,还有 prediction.io

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        • 2019-09-25
        • 2011-02-11
        • 2017-10-26
        • 1970-01-01
        • 1970-01-01
        • 2011-01-19
        相关资源
        最近更新 更多