
1) 【一句话结论】采用基于课程内容向量的余弦相似度计算课程相似度,结合学生历史选课频率与成绩的加权机制,通过矩阵分解优化大规模场景,实现个性化课程推荐。
2) 【原理/概念讲解】课程推荐系统的核心是“相似性”与“个性化”。课程相似度计算:将每门课程抽象为内容向量(如关键词、主题标签、先修课程关联等),用余弦相似度衡量向量夹角余弦值(值域[-1,1],越接近1越相似)。学生历史行为:选课频率反映兴趣强度(高频课程更相关),成绩反映课程匹配度(高绩点课程更优质,可加权)。推荐逻辑:先构建课程相似度矩阵,再对每个学生,根据历史行为加权后计算推荐得分(如推荐得分=Σ(课程相似度×行为权重)),选择得分最高的课程。
3) 【对比与适用场景】
| 类别 | 方法/逻辑 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|---|
| 课程相似度 | 余弦相似度 | 计算课程内容向量夹角余弦值 | 忽略向量元素数量差异,适合文本/关键词向量 | 大规模课程数据(如数千门课程) | 需要构建内容向量(如TF-IDF转换) |
| Jaccard相似度 | 计算课程标签集合交集/并集比值 | 适合标签稀疏场景(如课程标签较少) | 标签丰富的课程(如标签数量多) | 标签数量少时效果差 | |
| 学生行为加权 | 选课频率 | 历史选课次数 | 反映兴趣强度,次数越高权重越高 | 学生兴趣稳定期(如大二、大三) | 频率过高可能掩盖新兴趣 |
| 成绩 | 课程成绩(如绩点) | 反映课程难度/适合度,高绩点课程权重高 | 学生成绩优秀期(如绩点高) | 成绩数据缺失时需补充 |
4) 【示例】假设课程数据:课程A(主题:算法,标签:算法, 数据结构),课程B(主题:数据结构,标签:数据结构, 算法),课程C(主题:数据库,标签:数据库)。学生1历史:选A(成绩90)、B(成绩85);学生2历史:选B(成绩80)、C(成绩70)。计算课程A与B的余弦相似度:向量A=[1,1,0],B=[1,1,0],相似度=1;学生1的推荐:课程C与A、B的相似度均低(A与C相似度=0,B与C相似度=0),但根据学生1的高绩点(A、B绩点高),推荐与B相似度高的课程(如课程D(主题:数据库,标签:数据库, SQL),则B与D相似度=1,推荐D。伪代码:def cosine_similarity(vec1, vec2): return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))。
5) 【面试口播版答案】各位面试官好,针对课程推荐系统的问题,我的核心思路是:先通过课程内容向量(如关键词、标签)计算相似度,再结合学生历史选课频率和成绩加权,实现个性化推荐。具体来说,课程相似度用余弦相似度,将课程转化为向量(比如“算法”课程向量是[1,0,0],“数据结构”是[0,1,0]),相似度越高越相关;然后对学生,选课频率高的课程权重高(比如选了3次,权重3),成绩高的课程权重也高(比如绩点4.0,权重2)。推荐时,先算所有课程的相似度矩阵,再对每个学生,计算每个新课程的推荐得分(相似度×选课频率权重+相似度×成绩权重),选得分最高的几门。时间复杂度方面,相似度矩阵计算是O(n²),n是课程数,适合中等规模(如几千门课程);如果课程数更多,可以用近似方法(如局部敏感哈希LSH)降低到O(n log n)。适用场景是高校课程推荐,尤其是计算机、大数据等专业,能结合学生兴趣和课程难度,提升选课精准度。
6) 【追问清单】
7) 【常见坑/雷区】