协同过滤(Collaborative Filtering,CF)是个性化推荐系统中非常经典的一类算法,核心思想是:不直接理解物品内容,而是根据大量用户的历史行为,发现“相似用户”或“相似物品”,再给当前用户推荐他可能感兴趣的内容。
在电商里,它可以用于推荐商品;在视频平台里,它可以用于推荐电影、短视频;在教育系统里,它也可以用于推荐知识点和题目。
早期推荐系统研究中,GroupLens 就使用了基于用户评分的协同过滤思想,为用户推荐新闻内容;后来 Amazon 的 Item-to-Item Collaborative Filtering 让“基于物品的协同过滤”成为工业界非常有代表性的推荐方案之一。[1][2]
一、先用一个生活例子理解协同过滤
| 用户 | 喜欢的电影 |
|---|---|
| 用户 A | 《三体》《流浪地球》《星际穿越》 |
| 用户 B | 《三体》《流浪地球》 |
| 用户 C | 《甄嬛传》《知否》《琅琊榜》 |
系统会发现:用户 A 和用户 B 都喜欢《三体》《流浪地球》
所以系统会认为:用户 A 和用户 B 的兴趣比较相似
既然用户 A 还喜欢《星际穿越》,那么系统就可能把《星际穿越》推荐给用户 B。
这就是协同过滤最基本的直觉:和你相似的人喜欢什么,你也可能喜欢什么。
或者换一种方式:经常被同一批人喜欢的两个物品,彼此也可能相似。
二、协同过滤依赖什么数据
协同过滤不依赖复杂的内容理解,而是依赖 用户行为数据。
常见行为包括:
| 行为 | 推荐系统里的含义 |
|---|---|
| 点击 | 用户可能感兴趣,但信号较弱 |
| 浏览时长 | 停留越久,兴趣可能越强 |
| 收藏 | 明确感兴趣 |
| 加购 | 购买意愿较强 |
| 购买 | 很强的正反馈 |
| 点赞 | 明确喜欢 |
| 评论 | 参与度较高 |
| 分享 | 兴趣和认可度都比较高 |
| 评分 | 最直接的偏好信号 |
这些行为可以转成一个分数,例如:
| 行为 | 分数 |
|---|---|
| 点击 | 1 |
| 收藏 | 3 |
| 加购 | 4 |
| 购买 | 5 |
于是我们可以构造一个 用户-物品评分矩阵:
| 用户 | 手机 | 耳机 | 电脑 | 相机 |
|---|---|---|---|---|
| 张三 | 5 | 4 | ? | ? |
| 李四 | 5 | ? | 4 | ? |
| 王五 | ? | ? | 5 | 4 |
这里的 ? 表示用户还没有发生行为。推荐算法要做的事情,就是预测这些空白位置:
张三会不会喜欢电脑?
李四会不会喜欢相机?
王五会不会喜欢耳机?
三、协同过滤的三种常见类型
协同过滤通常可以分为三类,这三种方法都属于协同过滤,但关注点不同。
- 基于用户的协同过滤,User-Based Collaborative Filtering
- 基于物品的协同过滤,Item-Based Collaborative Filtering
- 基于矩阵分解的协同过滤,Matrix Factorization
基于用户的协同过滤:找相似的人
核心思路是:找到和当前用户相似的人,把这些相似用户喜欢的内容推荐给当前用户。
例如:
| 用户 | 喜欢的商品 |
|---|---|
| 用户 A | 商品 1、商品 2、商品 3 |
| 用户 B | 商品 1、商品 2、商品 3、商品 4 |
系统会认为:用户 A 和用户 B 很相似,因为用户 B 还喜欢商品 4,所以系统可以把商品 4 推荐给用户 A。
实现步骤
- 收集用户行为数据。
- 把用户行为转成评分或偏好值。
- 计算用户和用户之间的相似度。
- 找到当前用户最相似的 K 个用户。
- 从这些相似用户喜欢过、但当前用户没接触过的物品里选候选内容。
- 按推荐分排序,返回前 N 个。
常见相似度计算方法包括:
- 余弦相似度,Cosine Similarity:把每个用户看成一个向量,两个向量方向越接近,说明两个用户越相似,在机器学习工具库中,余弦相似度通常被定义为两个向量点积与两个向量长度乘积的比值。[3]
- 优点:思路直观,容易理解,适合用户数量不太大、行为数据较完整的场景。可以利用“相似人群”的经验。
- 缺点:用户数量很多时,计算用户两两相似度会很慢。用户兴趣变化快,相似用户也可能频繁变化。新用户没有行为数据时,很难推荐。
- 皮尔逊相关系数,Pearson Correlation
- Jaccard 相似度
基于物品的协同过滤:找相似的内容
核心思路是:不是找相似用户,而是找相似物品。用户喜欢过某个物品,就推荐和它相似的物品。
例如很多用户都会一起购买:
手机 + 手机壳
手机 + 充电器
手机 + 耳机
系统就会认为:手机壳、充电器、耳机和手机存在较强关联。
如果用户买了手机,系统就可以推荐手机壳、充电器和耳机。
Amazon 的经典论文介绍过 Item-to-Item Collaborative Filtering:先构建商品之间的相似关系,再根据用户已经购买或评分过的商品生成推荐。这种方法相对稳定,也适合大规模商品推荐。[2:1]
基于物品的协同过滤一般这样做:
- 收集用户行为。
- 构建物品和物品之间的共现关系。
- 计算物品相似度。
- 找到用户已经喜欢或购买过的物品。
- 找到这些物品的相似物品。
- 过滤掉用户已经看过、买过或不符合规则的物品。
- 排序后推荐。
假设用户喜欢过商品 A,系统会优先推荐商品 B,其次推荐商品 C。
| 相似商品 | 与商品 A 的相似度 |
|---|---|
| 商品 B | 0.9 |
| 商品 C | 0.7 |
| 商品 D | 0.4 |
优点:商品相似度通常比用户相似度更稳定,可以提前离线计算相似物品表,在线推荐时速度较快,工业界早期非常常用。
缺点:新商品没有行为数据时,很难被推荐,如果用户历史行为太少,推荐效果会差,容易推荐和用户已看内容非常接近的东西,导致兴趣范围变窄。
矩阵分解:把用户和物品变成隐藏向量
矩阵分解是协同过滤中更高级的一类方法。
目标是:把用户和物品都表示成一组隐藏特征向量,然后用这两个向量预测用户对物品的兴趣分数。
例如系统可能学到一些隐藏维度:
用户特征:
喜欢科幻的程度
喜欢低价商品的程度
喜欢高评分商品的程度
物品特征:
科幻属性
价格属性
评分属性
这些隐藏特征不一定是人工定义的,而是模型从用户行为数据中学习出来的。
假设:
用户 A = [0.9, 0.2, 0.7]
电影 X = [0.8, 0.1, 0.6]
预测分数可以简单理解为:
用户向量 · 物品向量 = 推荐分数
矩阵分解在推荐系统领域非常经典。Koren、Bell 和 Volinsky 在 2009 年的文章中系统介绍了矩阵分解技术在推荐系统中的作用,尤其是在 Netflix Prize 背景下的应用。[4]
优点:能发现更深层的用户兴趣和物品关系,比简单相似度方法更有表达能力,适合较大规模推荐系统。
缺点:对初学者来说理解成本更高,需要训练模型,需要调参数,对数据质量和数据量有一定要求。
最简单的 User-Based CF 代码示例
下面是一个非常小的 Python 示例,用来帮助理解协同过滤的基本逻辑。
import math
data = {
"张三": {"苹果": 5, "香蕉": 4, "西瓜": 1},
"李四": {"苹果": 4, "香蕉": 5},
"王五": {"西瓜": 5, "葡萄": 4},
}
def cosine_similarity(user1, user2):
common_items = set(user1.keys()) & set(user2.keys())
if not common_items:
return 0
dot = sum(user1[item] * user2[item] for item in common_items)
norm1 = math.sqrt(sum(score ** 2 for score in user1.values()))
norm2 = math.sqrt(sum(score ** 2 for score in user2.values()))
return dot / (norm1 * norm2)
def recommend(target_user):
scores = {}
for other_user, items in data.items():
if other_user == target_user:
continue
similarity = cosine_similarity(data[target_user], items)
for item, score in items.items():
if item not in data[target_user]:
scores[item] = scores.get(item, 0) + similarity * score
return sorted(scores.items(), key=lambda x: x[1], reverse=True)
print(recommend("李四"))
这段代码的逻辑是:
- 计算“李四”和其他用户的相似度。
- 找到相似用户喜欢、但李四没买过的水果。
- 根据相似度和评分计算推荐分。
- 返回推荐结果。
八、真实推荐系统通常怎么做
真实系统一般不是只跑一个简单算法,而是分成多个阶段:
用户行为数据
↓
构建用户-物品关系
↓
召回候选物品
↓
排序
↓
过滤
↓
展示推荐结果
1. 收集行为数据
例如:
| user_id | item_id | behavior | weight | time |
|—|—|—|—:|—|
| 1001 | 2001 | click | 1 | 2026-06-05 |
| 1001 | 2002 | favorite | 3 | 2026-06-05 |
| 1002 | 2001 | buy | 5 | 2026-06-05 |
2. 行为打分
不同的行为代表不同强度:
点击:1
收藏:3
加购:4
购买:5
如果考虑时间,还可以让旧行为权重降低:
最近行为更重要,几个月前的行为变弱。
3. 召回候选内容
召回阶段的目标不是精排,而是先找到一批“可能有用”的候选内容。
例如:
用户买过商品 A
系统找到商品 A 的相似商品 B、C、D、E
4. 排序
排序时可以综合考虑:
推荐分数
商品热度
用户兴趣
时间新鲜度
库存
价格
是否已经看过
5. 过滤
过滤掉:
用户已经买过的
用户明确不感兴趣的
下架的
库存不足的
不符合业务规则的
九、协同过滤的优点和缺点
优点
协同过滤最大的优点是:
不需要理解物品本身,只需要用户行为数据。
它可以发现一些用户自己也没有明确表达出来的兴趣。
例如:
喜欢电影 A 的人,也经常喜欢电影 B。
系统不一定需要理解电影剧情,也可以做出推荐。
缺点
协同过滤也有几个典型问题。
1. 冷启动问题
新用户没有行为,系统不知道他喜欢什么。
新物品没有用户行为,系统也不知道该推荐给谁。
解决方式包括:
-
新用户先选择兴趣标签。
-
给新用户推荐热门内容。
-
结合用户注册信息。
-
结合内容推荐算法。
-
给新商品一些运营曝光机会。
2. 数据稀疏问题
平台可能有很多用户和很多商品,但每个用户只接触过其中极少一部分。
例如:
平台有 100 万个商品,一个用户只买过 10 个。
这会导致用户-物品矩阵非常稀疏。
3. 热门偏置
热门商品被更多人点击,所以更容易继续被推荐。
这可能导致:
热门的越来越热门,冷门的越来越难被看见。
4. 可解释性有限
系统可以解释为:
因为和你相似的人喜欢它。
但很难像老师一样解释:
为什么这个内容真正适合你现在学习。
十、协同过滤如何应用在知识点和题目推荐中
把协同过滤放到教育场景里,本质上是把电商里的:
用户 - 商品
换成:
学生 - 知识点
学生 - 题目
教育推荐系统属于技术增强学习,Technology Enhanced Learning,TEL,中的一个重要方向。相关研究通常会关注如何根据学习者的历史行为、学习目标、学习资源和学习效果进行个性化推荐。[5][6]
十一、教育推荐和商品推荐最大的不同
在电商里:
买了 = 喜欢
收藏 = 感兴趣
点击 = 可能感兴趣
但在教育里:
做错了 ≠ 不喜欢
做错了 = 可能需要学习
这是最关键的差异。
所以教育推荐不是简单推荐“学生喜欢的题”,而是要推荐:
学生现在最需要补的知识点
学生当前难度最合适的题
学生容易混淆的相关知识点
学生复习收益最高的内容
也就是说,教育推荐更关心:
-
薄弱程度
-
掌握程度
-
遗忘风险
-
题目难度
-
知识点关联
-
学习路径
十二、教育场景里的行为数据
教育系统中可以收集这些行为:
| 行为 | 可能含义 |
|—|—|
| 做题 | 学生接触过该题 |
| 答对 | 可能已经掌握 |
| 答错 | 可能存在薄弱点 |
| 重复答错 | 高风险薄弱点 |
| 查看解析 | 说明可能不熟 |
| 收藏题目 | 学生认为重要 |
| 复习知识点 | 有学习需求 |
| 停留时间长 | 可能理解困难 |
| 多次练习后答对 | 掌握度提升 |
这些行为可以转成学习信号。
例如:
| 行为 | 学习信号 |
|—|—![]()
| 答对 | +1 |
| 答错 | -2 |
| 查看解析 | -1 |
| 重复答错 | -3 |
| 收藏错题 | -1 |
注意:这里的负分不是“不喜欢”,而是表示:
这个地方可能需要加强。
十三、推荐知识点
推荐知识点的目标是回答:
这个学生接下来应该复习哪些知识点?
例如学生最近错了这些题:
| 题目 | 对应知识点 |
|—|—|
| 题目 1 | 冠心病 |
| 题目 2 | 心绞痛 |
| 题目 3 | 心肌梗死 |
系统发现很多相似学生后来也容易错:
急性冠脉综合征
硝酸甘油用药
心电图 ST 段改变
那么系统可以推荐这些知识点。
教育推荐中可以把学习者表现、学习资源、学习活动和推荐策略结合起来;一些自适应学习研究也会把学习者的基础信息、学习偏好、认知水平、学习风格等维度纳入学习者模型,用于支持个性化推荐。[7]
十四、推荐题目
推荐题目的目标是回答:
这个学生接下来应该做哪些题?
例如学生薄弱知识点是:
心衰治疗
系统可以推荐:
心衰治疗相关的基础题
心衰治疗相关的易错题
心衰治疗相关的进阶题
但题目推荐不能只看相关性,还要看难度。
| 掌握度 | 推荐题目类型 |
|—|—|
| 0 - 0.4 | 基础题、解析详细的题 |
| 0.4 - 0.7 | 常规练习题 |
| 0.7 - 0.9 | 易错题、综合题 |
| 0.9 以上 | 少量复习题,避免重复刷 |
十五、User-Based CF 如何用于学习推荐
在教育场景里,User-Based CF 可以理解为:
找到和当前学生学习表现相似的学生,
把这些学生后来有效练习过的知识点或题目推荐给当前学生。
例如:
| 学生 | 错过的知识点 |
|—|—|
| 学生 A | 知识点 1、知识点 2、知识点 3 |
| 学生 B | 知识点 1、知识点 2、知识点 3、知识点 4 |
系统会认为学生 A 和学生 B 的薄弱结构相似。
如果学生 B 后来练习知识点 4,并且正确率提升了,那么系统可能推荐学生 A 学习知识点 4。
适合场景
-
学生数量较多。
-
每个学生都有较完整的做题记录。
-
系统希望根据“相似学生的学习路径”推荐。
问题
-
新学生行为少,不容易找到相似学生。
-
学生水平会变化,历史相似不代表一直相似。
-
如果只模仿别人做过什么,可能忽略当前学生真实目标。
十六、Item-Based CF 如何用于知识点和题目推荐
教育场景中,Item-Based CF 往往更容易落地。
它可以理解为:
找到相似题目或相似知识点,
然后根据学生当前薄弱项推荐相关内容。
例如很多学生都同时错过:
题目 A:心衰表现
题目 B:肺水肿判断
题目 C:利尿剂使用
系统就会认为这些题目之间有关联。
如果某个学生错了题目 A,就可以推荐题目 B 和题目 C。
知识点也是一样:
如果很多学生同时在“心衰表现”和“肺水肿”上出错,
系统就认为这两个知识点之间的学习关联比较强。
以后学生在“心衰表现”上表现不好,系统就可以推荐“肺水肿”相关知识点或题目。
为什么 Item-Based CF 更适合初期教育系统
因为教育系统通常有几个特点:
-
题库相对稳定。
-
知识点体系相对固定。
-
知识点和题目可以提前标注。
-
可以离线计算题目相似度或知识点相似度。
-
在线推荐时只需要根据学生当前薄弱项查表。
十七、完整实现流程
一个简单的知识点、题目推荐系统可以这样设计:
学生做题记录
↓
题目映射到知识点
↓
计算学生对每个知识点的掌握度
↓
计算知识点之间、题目之间的相似度
↓
根据学生薄弱点召回候选题
↓
根据难度、质量、掌握度排序
↓
返回推荐结果
十八、第一步:题目绑定知识点
每道题应该绑定一个或多个知识点。
例如:
| question_id | 题目 | 知识点 |
|—|—|—|
| Q001 | 心衰患者出现粉红色泡沫痰提示什么? | 心衰、肺水肿 |
| Q002 | 使用利尿剂时应观察什么? | 心衰治疗、利尿剂 |
| Q003 | 洋地黄中毒的表现是什么? | 心衰治疗、洋地黄 |
这一步很重要。
如果题目没有绑定知识点,系统就只能知道学生“错了哪道题”,但不知道学生“哪里不会”。
十九、第二步:记录学生做题行为
可以记录如下数据:
| student_id | question_id | result | duration | reviewed_explanation | time |
|—|—|—|—:|—|—|
| S001 | Q001 | wrong | 80 秒 | yes | 2026-06-05 |
| S001 | Q002 | right | 35 秒 | no | 2026-06-05 |
| S002 | Q001 | wrong | 90 秒 | yes | 2026-06-05 |
这些数据可以进一步转换为知识点掌握度。
二十、第三步:计算知识点掌握度
最简单的掌握度公式:
掌握度 = 答对次数 / 做题次数
例如:
张三在“心衰”上做了 2 道题,对了 1 道
掌握度 = 1 / 2 = 0.5
也可以加权:
答对 = +1
答错 = -2
查看解析 = -1
重复答错 = -3
这样可以更敏感地发现薄弱知识点。
如果要做得更专业,可以继续引入知识追踪,Knowledge Tracing,用模型估计学生对知识点的掌握概率。但对初学者来说,先用正确率和错题次数就够了。
二十一、第四步:计算知识点相似度
我们可以根据大量学生的错题行为,计算知识点之间的相似度。
例如:
| 学生 | 心衰 | 肺水肿 | 高血压 | 糖尿病 |
|—|—:|—:|—:|—![]()
| 张三 | 错 | 错 | 对 | 对 |
| 李四 | 错 | 错 | 对 | - |
| 王五 | 对 | - | 错 | 错 |
可以看出:
心衰 和 肺水肿 经常一起错
所以这两个知识点的相似度较高。
后续如果某个学生在“心衰”上表现不好,系统可以推荐“肺水肿”相关内容。
二十二、第五步:召回候选题
假设学生薄弱知识点是:
心衰
系统查出相似知识点:
| 相似知识点 | 相似度 |
|—|—![]()
| 肺水肿 | 0.9 |
| 利尿剂 | 0.8 |
| 洋地黄 | 0.7 |
然后从题库里找这些知识点对应的题:
题目 A:肺水肿判断
题目 B:利尿剂使用
题目 C:洋地黄中毒
这些题目就是候选题。
二十三、第六步:排序推荐
候选题不能直接全部推给学生,还要排序。
一个简单推荐分公式可以是:
推荐分 = 薄弱程度 × 知识点相似度 × 题目质量 × 难度匹配度
例如:
推荐分 = 0.8 × 0.9 × 0.95 × 0.7
其中:
-
薄弱程度:学生越不会,分数越高。 -
知识点相似度:和当前薄弱知识点越相关,分数越高。 -
题目质量:高质量题、解析详细题优先。 -
难度匹配度:题目难度越适合学生当前水平,分数越高。
二十四、小白最容易落地的版本
如果你是第一次做,不建议一上来就做复杂模型。
可以先做一个简单版本:
-
每道题绑定一个或多个知识点。
-
记录用户每次答题结果。
-
统计每个知识点的正确率。
-
找出正确率最低的知识点。
-
推荐这些知识点下面还没做过的题。
-
根据题目难度排序。
这个版本还不算严格的协同过滤,但已经能解决很多实际问题。
然后再升级为协同过滤:
不仅看当前学生自己的错题,
还看其他学生的共同错题规律。
也就是:
很多学生一起错的知识点,说明它们可能有关联;
很多学生一起错的题,说明它们可以互相推荐。
二十五、一个教育推荐系统的简单数据结构
题目表 questions
| 字段 | 含义 |
|—|—|
| id | 题目 ID |
| title | 题干 |
| difficulty | 难度 |
| quality_score | 题目质量分 |
知识点表 knowledge_points
| 字段 | 含义 |
|—|—|
| id | 知识点 ID |
| name | 知识点名称 |
| parent_id | 上级知识点 |
题目-知识点关系表 question_knowledge_points
| 字段 | 含义 |
|—|—|
| question_id | 题目 ID |
| knowledge_point_id | 知识点 ID |
学生答题记录表 student_question_records
| 字段 | 含义 |
|—|—|
| student_id | 学生 ID |
| question_id | 题目 ID |
| result | 答对或答错 |
| duration | 做题时长 |
| reviewed_explanation | 是否看了解析 |
| created_at | 做题时间 |
知识点相似度表 knowledge_point_similarity
| 字段 | 含义 |
|—|—|
| knowledge_point_a | 知识点 A |
| knowledge_point_b | 知识点 B |
| similarity | 相似度 |
二十六、推荐流程伪代码
def recommend_questions(student_id):
# 1. 计算学生知识点掌握度
mastery = calculate_mastery(student_id)
# 2. 找到薄弱知识点
weak_points = find_weak_knowledge_points(mastery)
# 3. 找到薄弱知识点的相似知识点
related_points = find_related_knowledge_points(weak_points)
# 4. 从题库里召回候选题
candidate_questions = find_questions_by_knowledge_points(
weak_points + related_points
)
# 5. 过滤掉学生已经做过的题
candidate_questions = filter_done_questions(
student_id,
candidate_questions
)
# 6. 根据薄弱程度、相似度、题目质量、难度匹配排序
ranked_questions = rank_questions(
student_id,
candidate_questions,
mastery
)
return ranked_questions[:10]
二十七、实际项目中的推荐策略
实际教育推荐系统可以分层做:
1. 第一层:薄弱知识点推荐
先告诉学生:
你现在最应该复习哪些知识点?
2. 第二层:相关题目推荐
再告诉学生:
每个知识点应该做哪些题?
3. 第三层:难度控制
根据学生当前水平决定:
基础题
常规题
易错题
综合题
4. 第四层:复习间隔
结合遗忘规律,定期推荐旧知识点复习。
5. 第五层:学习路径
如果知识点之间有前置关系,还要避免直接推荐太难的后置知识点。
例如:
先学基础概念
再学临床表现
再学诊断
再学治疗
再学综合病例题
二十八、协同过滤在教育场景中的注意事项
1. 不要把“答错”当成“不喜欢”
这是教育推荐最容易犯的错误。
答错通常意味着:
学生需要进一步学习。
而不是:
学生不想看这个内容。
2. 不要只推荐难题
如果学生掌握度很低,直接推荐难题会打击学习体验。
更合理的是:
先基础题,再常规题,再综合题。
3. 不要只看相似度
题目推荐至少要同时考虑:
-
知识点相关性
-
学生薄弱程度
-
题目难度
-
题目质量
-
学生是否做过
-
最近是否已经练过类似题
4. 要避免重复推荐
如果系统一直推荐同一类题,学生会觉得机械和无聊。
可以增加:
-
最近做过的不再推荐。
-
同一知识点一次不要推太多。
-
新题、复习题、综合题混合推荐。
5. 要结合老师或教研规则
协同过滤是基于行为数据的算法,但教育系统还应该尊重知识结构。
例如:
某个知识点虽然和当前错题相似,
但它属于更高难度章节,
当前阶段可能还不适合推荐。
这时应该让教研规则参与过滤和排序。
二十九、应该从哪种算法开始
如果是初学者或早期项目,推荐顺序是:
-
规则版薄弱知识点推荐
-
Item-Based CF 题目推荐
-
Item-Based CF 知识点推荐
-
User-Based CF 学习路径推荐
-
矩阵分解或深度学习推荐
原因是:
-
规则版最容易上线。
-
Item-Based CF 最容易解释。
-
题目和知识点相似度可以提前计算。
-
学生使用时推荐速度快。
-
后续可以逐步引入更复杂模型。
三十、一句话总结
协同过滤的本质是:
根据群体行为,发现相似用户或相似物品,再进行推荐。
用在教育系统里,可以理解为:
根据大量学生的做题行为,
发现相似学生、相似题目、相似知识点,
再给当前学生推荐最需要补的知识点和最合适的题目。
对于知识点、题目推荐,最实用的起步方案是:
先计算学生薄弱知识点,
再用 Item-Based CF 找相关知识点和相关题目,
最后结合题目难度、题目质量和学习路径进行排序。
这样既容易理解,也比较容易在真实项目中落地。
参考出处
Resnick, P., Iacovou, N., Suchak, M., Bergstrom, P., & Riedl, J. GroupLens: An Open Architecture for Collaborative Filtering of Netnews. CSCW 1994. https://dl.acm.org/doi/10.1145/192844.192905 ↩︎
Linden, G., Smith, B., & York, J. Amazon.com Recommendations: Item-to-Item Collaborative Filtering. IEEE Internet Computing, 2003. https://www.cs.umd.edu/~samir/498/Amazon-Recommendations.pdf ↩︎ ↩︎
scikit-learn documentation,
cosine_similarity. cosine_similarity — scikit-learn 1.9.0 documentation ↩︎Koren, Y., Bell, R., & Volinsky, C. Matrix Factorization Techniques for Recommender Systems. IEEE Computer, 2009. https://datajobs.com/data-science-repo/Recommender-Systems-[Netflix].pdf ↩︎
Erdt, M., Fernandez, A., & Rensing, C. Evaluating Recommender Systems for Technology Enhanced Learning: A Quantitative Survey. IEEE Transactions on Learning Technologies, 2015. Resource Conscious Diagnosis and Reconfiguration for NoC Permanent Faults | IEEE Journals & Magazine | IEEE Xplore ↩︎
Urdaneta-Ponte, M. C., Mendez-Zorrilla, A., & Oleagordia-Ruiz, I. Recommendation Systems for Education: Systematic Review. Electronics, 2021. https://www.mdpi.com/2079-9292/10/14/1611 ↩︎
Zhang, Y. Analysis and Construction of the User Characteristic Model in the Adaptive Learning System for Personalized Learning. Computational Intelligence and Neuroscience, 2022. Analysis and Construction of the User Characteristic Model in the Adaptive Learning System for Personalized Learning - PMC ↩︎