可以看KDD会议,最新推荐系统论文。
通过对用户之间的关系,用户对物品的评价反馈一起对信息进行筛选过滤,从而找到目标用户感兴趣的信息。

用户—商品的评分矩阵(该矩阵很可能是稀疏的)
| 用户\物品 | |||
|---|---|---|---|
| x | x | ||
| x | x | ||
| x | x |
行向量表示每个用户的喜好,列向量表明每个物品的属性
基于评分矩阵(行列)计算相似度,以下是计算相似度的一些方法:
主要有基于用户的协同过滤与基于物品的协同过滤。
矩阵分解为两个低秩的矩阵的乘积,通过分解后的两矩阵内积,来填补缺失的数据。
优点:思路简单,可以方便完成预测;
缺点:很难增量训练(当样本激增时,可能要重新搭建矩阵),特征融合难;

这里k是个隐因子,相当于是一个超参数。
对预测用户是否会“点击商品”进行分类。转成一个分类模型。
ϕ ( x ) = w 0 + w 1 x 1 + ⋯ + w n x n = w 0 + ∑ i = 1 n w i x i \begin{aligned} \phi(x) &=w_{0}+w_{1} x_{1}+\cdots+w_{n} x_{n} \\ &=w_{0}+\sum_{i=1}^{n} w_{i} x_{i} \end{aligned} ϕ(x)=w0+w1x1+⋯+wnxn=w0+i=1∑nwixi
优点:模型简单,可解释性强,训练速度快(SGD梯度下降);
缺点:模型建模能力有限(没有考虑特征之间的相关性,以及特征之间的交叉),需要人工特征工程;
ϕ ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n − 1 ∑ j = i + 1 n w i j x i x j \phi(x) = w_{0}+\sum_{i = 1}^{n} w_{i} x_{i}+\sum_{i = 1}^{n-1} \sum_{j = i+1}^{n} w_{i j} x_{i} x_{j} ϕ(x)=w0+∑i=1nwixi+∑i=1n−1∑j=i+1nwijxixj
在逻辑回归基础上加入了暴力二阶特征交叉。
优点:加入二阶特征,建模能力增强;
缺点:时间复杂度高 n − − > n 2 n-->n^2 n−−>n2;
ϕ ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n − 1 ∑ j = i + 1 n ⟨ v i , v j ⟩ x i x j \phi(x)=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n-1} \sum_{j=i+1}^{n}\left\langle v_{i}, v_{j}\right\rangle x_{i} x_{j} ϕ(x)=w0+∑i=1nwixi+∑i=1n−1∑j=i+1n⟨vi,vj⟩xixj
为每个特征加入隐含权重(两个向量之间的内积),作为特征交叉的权重。
优点∶相比于PLOY2降低了模型参数量( n 2 − − > n K n^2-->nK n2−−>nK),自动特征工程
缺点︰特征交叉度有限(二阶)
GBDT:作为特征编码器;主要用于输入数据的特征筛选以及特征编码,生成离散的特征向量
LR(逻辑回归)︰利用编码结果进行训练

优点︰灵活,适合新增特征(用树模型作特征组合)
缺点:树模型复杂度高
将用户对物品的打分当做分类问题。
使用全连接层学习用户与物品的交互。

用多层的神经网络代替矩阵分解的操作
用全连接网络可能会比乘法更加高效一点。
基本淘汰
Wide为线性模型,Deep为深度模型
浅层模型(记忆能力)和深层模型模型(泛化能力),

Wide部分可以记住id,以此做一个建模。类似于LR。
Deep可以视为一个全连接网络,类似于NCF。
DeepFM包含FM和DNN两部分,两部分共享输入特征。使用FM替换wide & Deep中的wide部分。
DeepFM:一阶特征+二阶特征+深度特征

抛弃之前的单Wide部分,用FM代替,加强浅层特征的组合能力,用一阶和二阶替代。
首个加入Attention机制
根据用户和物品调整权重

https://github.com/shenweichen/DeepCTR
https://github.com/shenweichen/DeepCTR-Torch
https://deepctr-torch.readthedocs.io/en/latest/Quick-Start.html
实现了经典的推荐算法模型,支持Keras和Pytroch。
对模型和输出处理封装的比较好,适合比赛用。
https://github.com/aksnzhy/xlearn
https://xlearn-doc-cn.readthedocs.io/en/latest/
LR、FM、FFM的高效实现,适合离线建模使用。
伯乐,一个统一、全面、高效的推荐系统代码库
https://recbole.io/cn/
支持72个模型,28个数据集,适合学术用途

Count:统计文本字符个数、单词个数
LabelEncoder:统一进行标签编
Multi One-Hot:进行多值标签编码(例如one-hot编码后相加)
AB : 011 BC : 110 AC : 101
One-Hot:eg:A: 0 0 1 B:010 C:100
CounterVector:与Multi One-Hot,但加入次数统计
TfidfVectorizer: 次数 和 词频统计
Word2Vec:词向量映射,然后聚合
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序