推荐系统最常见的应用就是商品推荐, 网购的兴起使得这个方向备受关注. 本文描述推荐系统的基础知识与个人想法. 注意事项:
本节给出符号表, 便于后面查阅.
表 1. 符号表
符号 | 含义 |
---|---|
n n n | 用户数 |
m m m | 项目数 |
R \mathbf{R} R | 评分表 |
Ω ( R ) \Omega(\mathbf{R}) Ω(R) | R \mathbf{R} R 中非零元素对应的位置集合. |
¬ Ω ( R ) \neg \Omega(\mathbf{R}) ¬Ω(R) | R \mathbf{R} R 中零元素对应的位置集合. |
推荐系统有一些基础数据与附加信息.
令用户数量为 n n n, 产品数量为 m m m. 基础数据为一个二维表 R = ( r i j ) n × m \mathbf{R} = (r_{ij})_{n \times m} R=(rij)n×m. 分两种情况讨论:
用户有自身信息, 如: 性别、国籍、信仰、年龄、职业等等.
商品有自身信息, 以电影为例, 包括: 出品时间、导演、主演、类型 (爱情片、动画片、喜剧片、悬疑片等,可多选)、片长等等.
以饭店为例, 有位置 (城市、街道)、营业时间、类别 (川菜、粤菜、鲁菜)
用户不仅要给商品打分, 还会写一些评论. 这些评论可能比分数提供更丰富的语义信息.
没想清楚, 以后补充.
推荐系统的核心问题是: 每个未知数据 (如 1.1 节所述, 它们都用 0 来表示) 的实际值应该是多少?
从机器学习的角度, 每个具体问题应说明其场景, 以及输入、输出、优化目标、约束条件. 由于推荐系统数据的特殊性, 以下由简到难进行分析.
问题 2.1.1 基于用户、商品信息的评分预测
输入: 评分矩阵 R \mathbf{R} R, 用户信息表 X = [ x 1 , … , x n ] T = [ x i j ] n × d u \mathbf{X} = [\mathbf{x}_1, \dots, \mathbf{x}_n]^{\mathrm{T}} = [x_{ij}]_{n \times d_u} X=[x1,…,xn]T=[xij]n×du, 商品信息表 T = [ t 1 , … , t m ] T = [ t i j ] m × d t \mathbf{T} = [\mathbf{t}_1, \dots, \mathbf{t}_m]^{\mathrm{T}} = [t_{ij}]_{m \times d_t} T=[t1,…,tm]T=[tij]m×dt, 其中 d u d_u du 是用户的属性数, d t d_t dt 是商品属性数.
输出: 函数 f : R d u × R d t → R f: R^{d_u} \times R^{ d_t} \rightarrow R f:Rdu×Rdt→R.
优化目标: min ∑ ( i , j ) ∈ Ω ( f ( x i , t j ) − r i j ) 2 \min \sum_{(i, j) \in \Omega} (f(\mathbf{x}_i, \mathbf{t}_j) - r_{ij})^2 min∑(i,j)∈Ω(f(xi,tj)−rij)2.
说明:
问题 2.1.2 基于用户、商品信息与隐式评分的推荐
输入: 浏览矩阵 R \mathbf{R} R, 用户信息表 X = [ x i j ] n × d u \mathbf{X} = [x_{ij}]_{n \times d_u} X=[xij]n×du, 商品信息表 T = [ t i j ] m × d t \mathbf{T} = [t_{ij}]_{m \times d_t} T=[tij]m×dt, 其中 d u d_u du 是用户的属性数, d t d_t dt 是商品属性数.
输出: 函数 f : R d u × R d t → { 0 , 1 } f:R^{d_u} \times R^{ d_t} \rightarrow \{0, 1\} f:Rdu×Rdt→{0,1}.
优化目标: min ∑ ( i , j ) ∈ [ 1.. n ] × [ 1.. m ] ( f ( x i , t j ) − r i j ) 2 \min \sum_{(i, j) \in [1..n] \times [1..m]} (f(\mathbf{x}_i, \mathbf{t}_j) - r_{ij})^2 min∑(i,j)∈[1..n]×[1..m](f(xi,tj)−rij)2
说明:
问题 2.2.1 评分预测
输入: 评分矩阵 R = [ r i j ] n × m \mathbf{R} = [r_{ij}]_{n \times m} R=[rij]n×m.
输出: 子矩阵 U = [ u 1 , … , u n ] T = [ u i j ] n × k \mathbf{U} = [\mathbf{u}_1, \dots, \mathbf{u}_n]^{\mathrm{T}} = [u_{ij}]_{n \times k} U=[u1,…,un]T=[uij]n×k, V = [ u 1 , … , v m ] T = [ v i j ] m × k \mathbf{V} = [\mathbf{u}_1, \dots, \mathbf{v}_m]^{\mathrm{T}} = [v_{ij}]_{m \times k} V=[u1,…,vm]T=[vij]m×k.
优化目标: min ∑ ( i , j ) ∈ Ω ( u i v j T − r i j ) 2 \min \sum_{(i, j) \in \Omega} (\mathbf{u}_i \mathbf{v}_j^{\mathrm{T}} - r_{ij})^2 min∑(i,j)∈Ω(uivjT−rij)2.
说明:
问题 2.2.2 考虑用户评论的评分预测
在 问题 2.2.1 的基础上, 考虑用户评论.
问题 2.1.1 基于浏览矩阵的推荐
输入: 浏览矩阵 R = [ r i j ] n × m \mathbf{R} = [r_{ij}]_{n \times m} R=[rij]n×m.
输出: 子矩阵 U \mathbf{U} U 与 V \mathbf{V} V, 阈值 α \alpha α.
优化目标: min ∑ ( i , j ) ∈ [ 1.. n ] × [ 1.. m ] ( I ( u i v j T − α ) − r i j ) 2 \min \sum_{(i, j) \in [1..n] \times [1..m]} (I(\mathbf{u}_i \mathbf{v}_j^{\mathbf{T}} - \alpha) - r_{ij})^2 min∑(i,j)∈[1..n]×[1..m](I(uivjT−α)−rij)2.
说明:
机器学习通常面临的是不确定性问题, 不能保证 100% 准确. 在分类问题中, 最小误差被称为 Bayes 误差. 参见: https://zhuanlan.zhihu.com/p/114609537. 例如, 整个论域中, 长发的 90% 是女人, 短头发的 80% 是男人. 长发和短发各占 50%. 如果只知道是否长发来建立分类器, 有如下几种:
A. 长发 ⇒ \Rightarrow ⇒ 女人; 短发 ⇒ \Rightarrow ⇒ 男人. 误差 (1 - 90%) * 50% + (1 - 80%) * 50% = 15%.
B. 长发 ⇒ \Rightarrow ⇒ 女人; 短发 ⇒ \Rightarrow ⇒ 女人. 误差 45%.
C. 长发 ⇒ \Rightarrow ⇒ 男人; 短发 ⇒ \Rightarrow ⇒ 男人. 误差 55%.
D. 长发 ⇒ \Rightarrow ⇒ 男人; 短发 ⇒ \Rightarrow ⇒ 女人. 误差 85%.
获得 长发 => 男人 这样的规则是可能的. 例如: 随机采样 7 人, 其中 3 人长发, 4 人短发. 长发的 3 人中, 2 个为男人. 这时, 根据采样 (训练集) 来看, 长发的应为男人.
训练集与测试集分布不一致, 是机器学习普遍面临的问题.
在推荐系统中, 则称之为魔法边界 (magic barrier).
问题 2.4.1 魔法边界评估
输入: 训练矩阵 R t = ( r i j t ) n × m \mathbf{R}^t = (r^t_{ij})_{n \times m} Rt=(rijt)n×m.
输出: 魔法边界估计值 (应指定 MAE 或 RSME).
说明: 这并非一个典型的机器学习问题, 所以并没有优化目标. 在实际中如何判断这个 magic barrier 是否靠谱呢? 如果找到一个算法, 它的 MAE 比 magic barrier 的值还低, 就说明这个 magic barrier 有问题. 如果当前最优算法的 MAE 比 magic barrier 的值高, 但高得很有限, 就可能间接说明 magic barrier 是靠谱的.
问题 2.5.1 误分类代价敏感的推荐
输入: 训练矩阵 (浏览数据) R t = ( r i j t ) n × m \mathbf{R}^t = (r^t_{ij})_{n \times m} Rt=(rijt)n×m, 完备矩阵 R = ( r i j ) n × m \mathbf{R} = (r_{ij})_{n \times m} R=(rij)n×m, 误分类代价矩阵 M = ( m i j ) 2 × 2 M = (m_{ij})_{2 \times 2} M=(mij)2×2.
输出: 预测矩阵 R ′ = ( r i j ′ ) n × m \mathbf{R}' = (r'_{ij})_{n \times m} R′=(rij′)n×m.
优化目标: 最小化平均误分类代价
min c o s t ( R t , R ′ , R ) = ∑ k , l ∈ { 0 , 1 } m k l ∣ { ( i , j ) ∈ ¬ Ω ( R t ) ∣ r i j ′ = k , r i j = l } ∣ ∣ ¬ Ω ( R t ) ∣ (4) \min cost(\mathbf{R}^t, \mathbf{R}', \mathbf{R}) = \frac{\sum_{k, l \in \{0, 1\}}m_{kl}|\{(i, j) \in \neg \Omega(\mathbf{R}^t) | r'_{ij} = k,r_{ij} = l\}|}{|\neg \Omega(\mathbf{R}^t)|} \tag{4} mincost(Rt,R′,R)=∣¬Ω(Rt)∣∑k,l∈{0,1}mkl∣{(i,j)∈¬Ω(Rt)∣rij′=k,rij=l}∣(4)
说明:
问题 2.5.2 三支推荐
输入: 训练矩阵 (浏览数据) R t = ( r i j t ) n × m \mathbf{R}^t = (r^t_{ij})_{n \times m} Rt=(rijt)n×m, 完备矩阵 R = ( r i j ) n × m \mathbf{R} = (r_{ij})_{n \times m} R=(rij)n×m, 分类代价矩阵 M = ( m i j ) 3 × 2 M = (m_{ij})_{3 \times 2} M=(mij)3×2.
输出: 预测矩阵 R ′ = ( r i j ′ ) n × m \mathbf{R}' = (r'_{ij})_{n \times m} R′=(rij′)n×m.
优化目标: 最小化平均误分类代价
min c o s t ( R t , R ′ , R ) = ∑ k ∈ { 0 , 1 , 2 } , l ∈ { 0 , 1 } m k l ∣ { ( i , j ) ∈ ¬ Ω ( R t ) ∣ r i j ′ = k , r i j = l } ∣ ∣ ¬ Ω ( R t ) ∣ (5) \min cost(\mathbf{R}^t, \mathbf{R}', \mathbf{R}) = \frac{\sum_{k \in \{0, 1, 2\}, l \in \{0, 1\}}m_{kl}|\{(i, j) \in \neg \Omega(\mathbf{R}^t) | r'_{ij} = k,r_{ij} = l\}|}{|\neg \Omega(\mathbf{R}^t)|} \tag{5} mincost(Rt,R′,R)=∣¬Ω(Rt)∣∑k∈{0,1,2},l∈{0,1}mkl∣{(i,j)∈¬Ω(Rt)∣rij′=k,rij=l}∣(5)
说明:
问题 2.5.3 基于回归的三支推荐
综合 问题 2.2.2 与 问题 2.4.2 即可.
实际的推荐系统都是交互式的: 系统向用户推荐一系列项目, 如 20 个; 用户选择其中的一些来购买, 或翻到下一页; 系统再根据用户的行为来改进推荐列表. 这就好像用户在与系统对话, 因此交互式推荐在英文中为 conversational recommendation.
场景描述:
对每个用户
Step 1. 登录系统;
Step 2. Repeat
Step 2.1 获得系统推荐的一组项目 (固定为 N N N 个);
Step 2.2 用户在其中选择喜欢的所有项目;
until 喜欢的项目为 0 0 0 个.
问题 2.6.1 交互式推荐
输入: 完备矩阵 R = ( r i j ) n × m \mathbf{R} = (r_{ij})_{n \times m} R=(rij)n×m.
输出: 推荐列表构成的预测矩阵 R ′ = ( r i j ′ ) n × m \mathbf{R}' = (r'_{ij})_{n \times m} R′=(rij′)n×m.
优化目标: 最大化准确率
max a c c ( R t , R ′ , R ) = ∣ { ( i , j ) ∈ ¬ Ω ( R t ) ∣ r i j ′ = r i j } ∣ ∣ ¬ Ω ( R t ) ∣ (6) \max acc(\mathbf{R}^t, \mathbf{R}', \mathbf{R}) = \frac{|\{(i, j) \in \neg \Omega(\mathbf{R}^t) | r'_{ij} = r_{ij}\}|}{|\neg \Omega(\mathbf{R}^t)|} \tag{6} maxacc(Rt,R′,R)=∣¬Ω(Rt)∣∣{(i,j)∈¬Ω(Rt)∣rij′=rij}∣(6)
说明:
数据噪音在每个领域都存在, 所以去噪也是个机器学习永恒的话题.
有两种评价去噪效果的方式:
a) 将原始评分数据当成是干净的, 随机加入噪音 (修改数据), 计算去噪后数据与原始数据的差距. 具体计算参见 (2) 式与 (3) 式.
b) 将原始数据随机分成训练集与测试集, 训练集中去除噪音获得修正后训练集. 用训练集与修正后训练集分别获得推荐模型 (用已有的算法), 并在测试集中获得预测效果. 效果提升越明显, 则表示去噪效果越好.
优劣对比:
方式 a) 的优势在于直接获得去噪效果; 缺点是需要干净的数据. 如果原始数据本身不是干净的, 就尴尬了. 有些工作让同一个人对同一个项目多次打分, 并将其平均分当作是干净数据, 这种做法有一定道理, 但对于人类来说, 做重复工作就会很烦.
方式 b) 的优势在于不需要干净数据, 更加客观; 缺点在于测试集也是有噪音的.
这里描述一些经典的算法. 它们也是很难被超越的.
相似性是物理世界的一个本源: 相似的东西在未知的方面也相似. 例如, 两个人的各项体检指标都相似 (体温 37.5 vs. 37.6, 血压 112 vs. 113, 等等), 则其中一个感冒, 另一个也很可能感冒.
k k kNN 是最常用的基于相似性的方法, 其思想是使用 k k k 个相似对象 (即邻居) 为当前实例提供参考. 它是推荐系统的一种基准方法.
具体而言, 要想知道某位用户喜欢什么, 可以分析相似用户喜欢什么. 以 问题 2.2.1 为例, 可分解为三个子问题:
a) 如何计算用户相似性?
这是 kNN 的核心问题.
以输入数据 R t \mathbf{R}^t Rt 为例, 每个用户的浏览记录都是一个长度为 m m m 的向量. 两个用户的相似度通常根据相应两个向量来计算. 令两个向量为 v i , v j ∈ { 0 , 1 } m \mathbf{v}_i, \mathbf{v}_j \in \{0, 1\}^m vi,vj∈{0,1}m, cosine 相似度为
c o s ( v i , v j ) = v i ⋅ v j ∥ v i ∥ × ∥ v j ∥ (7) cos(\mathbf{v}_i, \mathbf{v}_j) = \frac{\mathbf{v}_i \cdot \mathbf{v}_j}{\|\mathbf{v}_i\| \times \|\mathbf{v}_j\|} \tag{7} cos(vi,vj)=∥vi∥×∥vj∥vi⋅vj(7)
Jaccard 相似度为
J a c c a r d ( v i , v j ) = ∣ { 1 ≤ k ≤ m } ∣ v i k = 1 , v j k = 1 } ∣ ∣ { 1 ≤ k ≤ m } ∣ v i k = 1 or v j k = 1 } ∣ (8) Jaccard(\mathbf{v}_i, \mathbf{v}_j) = \frac{|\{1 \le k \le m\} | v_{ik} = 1, v_{jk} = 1\}|}{|\{1 \le k \le m\} | v_{ik} = 1 \textrm{ or } v_{jk} = 1\}|} \tag{8} Jaccard(vi,vj)=∣{1≤k≤m}∣vik=1 or vjk=1}∣∣{1≤k≤m}∣vik=1,vjk=1}∣(8)
其中, v i k v_{ik} vik 为 v i \mathbf{v}_i vi 的第 k k k 个分量. 很多文献也用集合的并、交来表示, 道理是一样的.
b) 如何设置合适的 k k k?
做实验吧. k k k 越大越稳定, k k k 越小针对性越强. 给定了 k k k 值和相似度计算方式, 邻居的确定也是一个问题. 参见 kNN 的数学表达式.
c) 如何选择推荐项目?
投票. 当前邻居没浏览过的项目, 按邻居浏览量递减排序 (最大值为 k k k, 表示所有邻居都看过; 最小值为 0 0 0). 从前往后选即可.
如果要解决 问题 2.2.2, 只需要将邻居用户对该项目的评分取均值即可 (注意, 0 不要考虑). 从这里可以看出, kNN 的适应性相当强.
用户集合的每个元素、项目集合的每个元素都作为一个节点. 如果用户浏览了项目, 则在它们之间画一条边. 这样就构成了二部图. 通过传递函数, 可以计算任意两个用户、任意两个项目之间的相似性.
论文:
Shang MS, Jin CH, Zhou T, Zhang YC (2009) Collaborative fil-tering based on multi-channel diffusion. Phys A Stat Mech Appl 388(23):4867–4871
形式概念是一个对 ⟨ U , T ⟩ \langle U, T\rangle ⟨U,T⟩, 其中 U U U 为一个用户集合, T T T 为一个项集合. 该概念表示同时浏览 T T T 中项目的用户在且仅在 U U U 里面.
已有的方法通过建立概念格来进行推荐.
3.1.1 节中, 计算的是用户相似度, 这被称为 user-based recommendation. 是否通过计算项目的相似度来进行推荐呢? 答案是肯定的, 而且 item-based recommendation 的效果通常比前者要好. 这多少有点让人意外, 但我们让数据说话, 它就告诉了我们这个事实.
从矩阵的角度, 将 R \mathbf{R} R 转置一下, 用户与项目的位置就互换了. 因此, user-based 还是 item-based 都可以使用同一个算法.
论文:
Linden, G., et al. “Amazon.Com Recommendations: Item-to-Item Collaborative Filtering.” IEEE Internet Computing, vol. 7, no. 1, 2003, pp. 76–80.
矩阵分解是一种神奇的操作. 它本身是数学上的一个问题, 即缺失值填补, 用于推荐系统简直不要太适合.
点击 推荐系统代码分析 2: 矩阵分解 查看源代码及分析.
考虑 问题 2.2.1, 我们要根据 R t \mathbf{R}^t Rt 来计算 R ′ \mathbf{R}' R′. 我们转而求两个矩阵 U = ( u 1 , … , u n ) T = ( u i j ) n × k \mathbf{U} = (\mathbf{u}_1, \dots, \mathbf{u}_n)^{\mathrm{T}} = (u_{ij})_{n \times k} U=(u1,…,un)T=(uij)n×k 和 V = ( v 1 , … , v m ) T = ( v i j ) m × k \mathbf{V} = (\mathbf{v}_1, \dots, \mathbf{v}_m)^{\mathrm{T}} = (v_{ij})_{m \times k} V=(v1,…,vm)T=(vij)m×k, 其中 k ≪ min { m , n } k \ll \min\{m, n\} k≪min{m,n}. 并使用如下优化目标:
min e r r o r = ∑ ( i , j ) ∈ Ω ( R t ) ∣ u i v j T − r i j ∣ (9) \min error = \sum_{(i, j) \in \Omega(\mathbf{R}^t)} |\mathbf{u}_i \mathbf{v}^{\mathrm{T}}_j - r_{ij}|\tag{9} minerror=(i,j)∈Ω(Rt)∑∣uivjT−rij∣(9)
R ′ = U V T \mathbf{R}' = \mathbf{U} \mathbf{V}^{\mathrm{T}} R′=UVT.
说明:
过拟合 (overfitting) 是机器学习的一个核心困难. 很多算法对训练集拟合得好, 但测试集却预测得不好. 这就好比一个学生平时成绩好, 但考试成绩不好.
加正则项是应对过拟合的一种常用方式.
min e r r o r = ∑ ( i , j ) ∈ Ω ( R t ) ( u i v j T − r i j ) 2 + λ ( ∥ U ∥ 2 2 + ∥ V ∥ 2 2 ) (10) \min error = \sum_{(i, j) \in \Omega(\mathbf{R}^t)} (\mathbf{u}_i \mathbf{v}^{\mathrm{T}}_j - r_{ij})^2 + \lambda (\|\mathbf{U}\|_2^2 + \|\mathbf{V}\|_2^2) \tag{10} minerror=(i,j)∈Ω(Rt)∑(uivjT−rij)2+λ(∥U∥22+∥V∥22)(10)
其中, ∥ U ∥ 2 2 = ∑ 1 ≤ i ≤ n , 1 ≤ j ≤ k u i j 2 \|\mathbf{U}\|_2^2 = \sum_{1 \leq i \leq n, 1 \leq j \leq k} u_{ij}^2 ∥U∥22=∑1≤i≤n,1≤j≤kuij2 为 2 范数, ∥ V ∥ 2 2 \|\mathbf{V}\|_2^2 ∥V∥22 同理. 加上正则项的意思是: 使得 U \mathbf{U} U 和 V \mathbf{V} V 的元素绝对值更小, 避免过拟合.
我使用一个 (不恰当的) 例子来理解过拟合: 为了称一个质量为 4g 的物品, 我们有两种方案:
A. 使用质量为 1007g 和 1003g 的砝码, 它们放在天平两端, 这时把物品放在 1003g 砝码这边, 完美拟合. 但是, 为了拟合 6g, 7g 的物品, 这两个砝码就做不到. 换言之, 它们对 4g 物品进行了过拟合.
B. 使用质量 2g 与 5g 的砝码. 它们不能完美拟合 4g 物品, 但它们对于 2g 到 7g 的物品都有较好的拟合能力.
从这个例子可以看出, 我们还是用质量小的砝码好点.
使用概率与最大似然对矩阵分解进行了改进, 就获得了好得多的效果.
论文:
Mnih, Andriy, and Ruslan R. Salakhutdinov. “Probabilistic Matrix Factorization.” Advances in Neural Information Processing Systems 20, vol. 20, 2007, pp. 1257–1264.
本节尽量按照第 2 节相同的节奏来介绍我们的工作.
在 3.1.2 节所描述方案的基础上, 每个通道单独计算.
论文:
Heng-Ru Zhang, Fan Min, Zhi-Heng Zhang, Song Wang, Efficient collaborative filtering recommendations with multi-channel feature vectors. International Journal of Machine Learning & Cybernetics. (2019)1165–1172.
点击下载
郑梅想到一个简单到爆的距离度量: 两个用户 (项目) 的距离, 就是其平均分的差值 (0 不参与计算). 我听到她的想法时, 根本不敢相信, 并举出如下例子:
x 1 = ( 0 , 3 , 5 , 0 , 2 , 3 ) \mathbf{x}_1 = (0, 3, 5, 0, 2, 3) x1=(0,3,5,0,2,3) 的平均分为 13 / 4 13/4 13/4; x 2 = ( 5 , 0 , 2 , 2 , 0 , 4 ) \mathbf{x}_2 = (5, 0, 2, 2, 0, 4) x2=(5,0,2,2,0,4) 的平均分为 13 / 4 13/4 13/4, 他们的距离为 ∣ 13 / 4 − 13 / 4 ∣ = 0 |13/4 - 13/4| = 0 ∣13/4−13/4∣=0.
可以发现: 这两个用户的购买物品集合相差很大, 相同物品的评分差异也很大, 其距离居然为 0.
郑梅坚持说自己的实验结果不错, 于是我花了半小时自己把代码实现了一遍. 不是我写得快, 而是代码量太少. 果然她是对的! 所以呢, 机器学习不管什么反例, 效果好就行. 后来我强行解释了一波: 两个学生参考高考, 录取的时候只看总分 (等价于平均分), 而并没考虑其偏科情况.
说明:
孙爽博和董新玲想到了将两种距离度量进行结合的方法, 效果也不错.
论文:
Shuang-Bo Sun, Zhi-Heng Zhang, Xin-Ling Dong, Heng-Ru Zhang, Tong-Jun Li, Lin Zhang, Fan Min, Integrating Triangle and Jaccard similarities for recommendation, PLOS ONE 12 (8) (2017) 1–16.
沈蓉萍比较独立, 是能够自己想出 idea 的少数学生之一. 她毕业后到西南交通大学继续读博士.
评论对评分有印证作用. 如果评分低评论却好, 证明是手滑了.
论文:
Rong-Ping Shen, Heng-Ru Zhang, Hong Yu, Fan Min. Sentiment based matrix factorization with reliability for recommendation. Expert Systems with Applications. (2019) 249-258.
4.5 节的第一篇论文也属于本方向. 由于那边更重要, 就不在这里描述了.
2015 年出差参加学术会议, 在飞机上我和 Henry 谈到了这篇论文的可能性, 他觉得很神奇: 这玩艺儿也能评估? 然后他就把论文写出来并发表了. 投稿的道路很漫长, 因为搞这个问题的人很少, 审稿人总想问: 这个算法的精度如何呀? 拜托, 我们不是想做推荐算法, 而是评估数据的质量.
在正态分布假设下, 做了三个模型: 第一个模型假设用户的评分都服从相同的正态分布. 第二个模型假设不同的评分级别有不同的适当标准差设置. 第三个将用户分成不同的组, 并假设标准差的设置与评级级别和用户组有关.
论文:
Heng-Ru Zhang, Fan Min, Yan-Xue Wu, Zhuo-Lin Fu, Lei Gao. Magic barrier estimation models for recommended systems under normal distribution. Applied Intelligence. (2018-12) 4678-4693.
点击下载
当前我们的进一步工作在 Applied Soft Computing (现在是一区) 上卡住了, 修改稿上传了半年没动静. 唉.
三支推荐是我们提出来的. 由于首次把三支决策理论与推荐系统应用结合, 所以受到比较多的关注. 两篇论文都为 ESI 高被引, 而且都被引 100 次以上.
第一个工作针对的是浏览矩阵和用户、项目信息. 由于可用的属性比较少, 我们建了随机森林进行分类.
论文:
Heng-Ru Zhang, Fan Min, Three-way recommender systems based on random forests, Knowledge-Based Systems 91 (2016) 275–286.
点击下载
第二个工作针对的是评分矩阵, 讨论了推荐阈值的问题: 在训练集上最优的阈值, 在测试集上也几乎是最优的. 这是真个好消息.
论文:
Heng-Ru Zhang, Fan Min, Bing Shi, Regression-based three-way recommendation, Information Sciences 378 (2017) 444–461.
点击下载
Henry 早期作品. 期刊一般, 但引用也不错, google scholar 显示有 35 次.
论文:
Heng-Ru Zhang, Fan Min, Xu He, Yuan-Yuan Xu, A hybrid recommender system based on user-recommender interaction, Mathematical Problems in Engineering 2015 (2015) 1–11.
我们将自适应学习的方式用于交互推荐. 其实这篇论文投 IEEE Access 挺可惜的 (这个期刊收稿太多声誉变差), 但硕士生要毕业, 时间太紧没办法.
论文:
Qi Huang, Yuan-Yuan Xu, Yong Chen, Heng-Ru Zhang, Fan Min. An Adaptive Mechanism for Recommendation Algorithm Ensemble. IEEE Access. (2019-01)10331-10342.
点击下载
本节列出一些工作思路. 你可以认为很有价值, 也可以认为很不靠谱, 反正两者是相近的.
Title: Self-paced matrix factorization for recommendation
说明: 与去噪相反, 从简单数据开始进行拟合, 逐步增加.
Step 1. 生成两个子矩阵 U \mathbf{U} U 和 V \mathbf{V} V, 它们比较简单 (平滑), 且仅需要对少量数据进行良好的拟合;
Step 2. 将拟合得比较好的数据挑出来 (简单样本);
Step 3. 使用当前的简单样本更新 U \mathbf{U} U 和 V \mathbf{V} V, 增加其复杂性, 且增加拟合的能力;
Step 4. if (简单样本集合足够大) 结束; else goto Step 2;
如何控制模型复杂度, 这些关键细节就不透露了.
Title: Matrix factorization with limited loss for recommendation
说明: 现在的损失函数, 大多用 1 范数、2 范数之类. 其中, 2 范数对少量预测效果比较差的点惩罚更大. 可以设计其它的损失函数, 例如, 有限损失函数.
优点:
a) 预测效果很差的样本 (评分) 并不能对模型造成很大的影响;
b) 并不需要去除或改变样本.
如何选择损失函数, 这些关键细节就不透露了.
所有作业均写到 CSDN, 交链接即可.
6.1 画一个思维导图, 描述你对推荐系统的理解.
6.2 找到并运行推荐系统代码, 进行结果分析.
6.3 描述你自己的新想法.
6.4 描述你对本贴的疑问 (也可在本贴留言).
未完待续