标签: recommendation-engine

建立协作过滤/推荐系统

我正在设计一个网站,该网站围绕着根据用户的口味向用户推荐各种商品的概念而构建.(即他们评价的项目,添加到收藏夹列表中的项目等).这方面的一些例子是亚马逊,Movielens和Netflix.

现在,我的问题是,我不知道从这个系统的数学部分开始.我愿意学习所需的数学,只是我不知道需要什么类型的数学.

我查看了Grouplens.org上的一些出版物,特别是" 迈向可扩展的kNN CF算法:探索群集的有效应用".(pdf)我很擅长理解所有内容,直到第5页"预测生成"

ps我不是在寻找对正在发生的事情的解释,虽然这可能会有所帮助,但我对我需要知道的数学更感兴趣.这样我就可以理解发生了什么.

math coldfusion recommendation-engine collaborative-filtering

8
推荐指数
3
解决办法
3049
查看次数

我在数据库中需要"买了这个项目的顾客也买了什么"?

亚马逊有"买了这个项目的顾客也买了".

我想知道并希望将其添加到我制作的购物车中.

我在数据库中需要哪些字段?任何网站,博客或资源?

你能建议我应该如何编码它的机制吗?

mysql recommendation-engine

8
推荐指数
2
解决办法
8054
查看次数

8
推荐指数
1
解决办法
2737
查看次数

使用属性进行延迟初始化的方法

我正在改变一个广泛使用的类,将类昂贵的初始化从类构造函数移动到Lazy Initialized属性.下面是一个例子(在c#中):

之前:

public class ClassA
{
    public readonly ClassB B;

    public void ClassA()
    {
        B = new ClassB();
    }
}
Run Code Online (Sandbox Code Playgroud)

后:

public class ClassA
{
    private ClassB _b;

    public ClassB B
    {
        get
        {
            if (_b == null)
            {
                _b = new ClassB();
            }

            return _b;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我正在改变的类中有更多这些属性,有些在某些情境中没有使用(因此是懒惰),但如果使用它们,它们可能会被重复调用.

不幸的是,这些属性通常也在课堂内使用.这意味着私有变量(_b)有可能被方法直接使用而不进行初始化.

有没有办法只在类中提供公共属性(B),或者甚至是在需要时初始化的替代方法?

这是从程序员转发的(显然不够主观):https: //softwareengineering.stackexchange.com/questions/34270/best-methods-for-lazy-initialization-with-properties

c# recommendation-engine lazy-initialization c#-3.0

8
推荐指数
2
解决办法
8454
查看次数

Apache Mahout性能问题

在过去的几天里,我一直在与Mahout合作,试图创建一个推荐引擎.我正在研究的项目有以下数据:

  • 12M用户
  • 2M项目
  • 18M用户项布尔建议
  • 我现在正在试验我们拥有的全套的1/3(即18M建议中的6M).在我试过的任何配置中,Mahout都提供了相当令人失望的结果.一些建议需要1.5秒,而其他建议需要一分钟.我认为建议的合理时间应该在100毫秒左右.

    Mahout为什么这么慢?
    我正在使用以下JVM参数在Tomcat上运行应用程序(即使添加它们并没有太大的区别):

    -Xms4096M -Xmx4096M -da -dsa -XX:NewRatio=9 -XX:+UseParallelGC -XX:+UseParallelOldGC
    
    Run Code Online (Sandbox Code Playgroud)

    以下是我的实验的代码段:

    用户相似度1:

    DataModel model = new FileDataModel(new File(dataFile));
    UserSimilarity similarity = new CachingUserSimilarity(new LogLikelihoodSimilarity(model), model);
    UserNeighborhood neighborhood = new NearestNUserNeighborhood(10, Double.NEGATIVE_INFINITY, similarity, model, 0.5);
    recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity);
    
    Run Code Online (Sandbox Code Playgroud)

    用户相似度2:

    DataModel model = new FileDataModel(new File(dataFile));
    UserSimilarity similarity = new CachingUserSimilarity(new LogLikelihoodSimilarity(model), model);
    UserNeighborhood neighborhood = new CachingUserNeighborhood(new NearestNUserNeighborhood(10, similarity, model), model);
    recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity);
    
    Run Code Online (Sandbox Code Playgroud)

    项目相似度1:

    DataModel dataModel = new FileDataModel(new File(dataFile)); …
    Run Code Online (Sandbox Code Playgroud)

    performance recommendation-engine mahout

    8
    推荐指数
    1
    解决办法
    3514
    查看次数

    回想一下,回忆率@ k和top-k推荐的精度

    根据笔者1,2,和3,召回是在资源库中选择了所有的相关项目的相关项目的百分比,而精密的相关项目从通过查询所选择的那些项目的百分比.

    因此,假设用户U获得了top- k推荐的项目列表,它们将类似于:

    回想 =(Relevant_Items_Recommended在顶ķ)/(Relevant_Items)

    精度 =(在顶Relevant_Items_Recommended ķ)/(ķ _Items_Recommended)

    直到那一部分一切都清楚但我不明白它们和召回率@k之间的区别.如何计算召回率@ k的公式?

    evaluation recommendation-engine precision-recall

    8
    推荐指数
    1
    解决办法
    1万
    查看次数

    如何训练序列项目的LSTM模型?

    我尝试将LSTM模型用于下一个篮子推荐.我想应用与本文相同的方法:下一个篮子推荐的动态循环模型

    在我的情况下,我有一些用户,他们在不同的时间购买一些物品.所以我设计了我的X数据,如:

        user ID       timestep     sequence items    
        user1            1          array(1, 20)
        user1            2            ...       
    
        user2            1            ...
        user2            2            ...
        user2            3            ...
    
        user3            1            ...
        user3            1            ...
    
    Run Code Online (Sandbox Code Playgroud)

    序列项表示具有形状(1,20)的数组.这些向量是在每个序列期间购买的每个项目(使用word2vec生成)的平均表示.

    然后我设计我的标签y:

        user ID       label    
        user1         np.array(1, 6000)
        user2         ...
        user3         ... 
    
    Run Code Online (Sandbox Code Playgroud)

    标签用户表示每个用户的下一个订单,在他们过去的订单之后表示X数据.另外,标签是[1 0 1 0 0 0 .. 1]之类的向量,其中1表示用户购买了该项目,否则为0.

    因此,我想使用LSTM来训练每个用户的过去序列以预测下一个购买序列.下面,我定义了一个LSTM模型,我没有返回序列,因为我有一个用户标签.

      model_rnn = Sequential()
      model_rnn.add(LSTM(20, return_sequences=False, input_shape=(None, 20)))
      model_rnn.add(Dropout(0.2))
      model_rnn.add(Dense(nb_classes)) 
      model_rnn.add(Activation("sigmoid"))                
    
      model_rnn.compile(loss='binary_crossentropy', optimizer="Adagrad")
      n_index = X.index.values
      n_sample = int(len(X.index.values)*0.7)
      user_index = np.random.choice(n_index, n_sample, replace=False)
      n_epochs = 10      
      for _ in …
    Run Code Online (Sandbox Code Playgroud)

    recommendation-engine sequence market-basket-analysis lstm keras

    8
    推荐指数
    1
    解决办法
    743
    查看次数

    用于查找类似项目和用户的推荐算法(和实现)

    我有一个大约70万用户的数据库以及他们观看/收听/阅读/购买/等的项目.我想建立一个推荐引擎,推荐基于具有相似品味的用户喜欢的新项目,以及实际上找到用户可能希望在我正在构建的社交网络上成为朋友的人(类似于最后.调频).

    我的要求如下:

    • 我数据库中的大多数"用户"实际上并不是我网站的用户.它们是从第三方来源挖掘的数据.但是,在推荐用户时,我希望将搜索范围限制为我网站的成员(同时仍然利用更大的数据集).
    • 我需要考虑多个项目.不是"喜欢你喜欢这一项的人......",而是"喜欢你喜欢的大多数物品的人......".
    • 我需要计算用户之间的相似性,并在查看他们的个人资料时显示它们(味道 - 米).
    • 有些项目是评级的,有些则不是.评级是1-10,而不是布尔值.在大多数情况下,如果不存在其他统计数据,则可以从其他统计数据中扣除评级值(例如,如果用户喜欢某个项目,但未对其进行评级,我可以假设评级为9).
    • 它必须以某种方式与Python代码交互.优选地,它应该使用单独的(可能是NoSQL)数据库并公开API以在我的web后端中使用.我正在制作的项目使用Pyramid和SQLAlchemy.
    • 我想考虑项目类型.
    • 我希望在项目页面上显示类似的项目,包括其类型(可能是标签)和喜欢该项目的用户(如亚马逊的"购买此项目的人"和Last.fm艺术家页面).仍应显示来自不同类型的项目,但具有较低的相似度值.
    • 我希望通过一些示例来详细记录算法的实现.

    请不要给出像"使用pysuggest或mahout"这样的答案,因为那些实现了大量的算法,我正在寻找最适合我的数据/使用的算法.我一直对Neo4j感兴趣,以及如何将它们表示为用户和项目之间的连接图.

    theory algorithm recommendation-engine data-mining collaborative-filtering

    7
    推荐指数
    2
    解决办法
    4519
    查看次数

    协同过滤的矩阵分解 - 新用户和项目?

    我一直在阅读有关使用矩阵分解进行协同过滤的内容,但我似乎找不到一个处理向系统添加新用户或项目或让用户评价新项目的示例.在这些情况下,需要重新计算项目用户矩阵和分解,是否正确?如何在大量用户和项目中表现良好?有办法解决吗?

    谢谢

    python recommendation-engine machine-learning svd collaborative-filtering

    7
    推荐指数
    1
    解决办法
    3571
    查看次数

    Apache Spark ALS建议方法

    尝试使用Spark MLLib的ALS构建推荐系统.

    目前,我们正在尝试每天为所有用户预建建议.我们使用简单的隐式反馈和ALS.

    问题是,我们有20M用户和30M产品,并且要调用主要的predict()方法,我们需要为用户和产品进行笛卡尔连接,这太大了,并且可能需要几天才能生成连接.有没有办法避免笛卡尔联合使流程更快?

    目前我们有8个节点,64Gb的RAM,我认为它应该足够的数据.

    val users: RDD[Int] = ???           // RDD with 20M userIds
    val products: RDD[Int] = ???        // RDD with 30M productIds
    val ratings : RDD[Rating] = ???     // RDD with all user->product feedbacks
    
    val model = new ALS().setRank(10).setIterations(10)
      .setLambda(0.0001).setImplicitPrefs(true)
      .setAlpha(40).run(ratings)
    
    val usersProducts = users.cartesian(products)
    val recommendations = model.predict(usersProducts)
    
    Run Code Online (Sandbox Code Playgroud)

    recommendation-engine machine-learning bigdata apache-spark apache-spark-mllib

    7
    推荐指数
    1
    解决办法
    1003
    查看次数