# 推荐系统 **Repository Path**: husterpan/recommendation-system ## Basic Information - **Project Name**: 推荐系统 - **Description**: 大创项目推荐系统实践 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-08-31 - **Last Updated**: 2022-08-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 使用说明 1. 设置输入 通过设置开头question和user变量确定数据来源 2. 总共有四个问题集合,1_6,7_8,9_10,11_12. 在main函数中for循环指定测试集,测试集前的所有数据用作召回集. 想要更改测试集和训练集需要从这改变. 3. 调整计算函数的调用参数.主要是cal_posib_intere_tag_based_on_user_q和cal_posib_intere_tag_based_on_user_tag. 详细的参数设置见代码说明 4. 后续是结果的合并以及评估,最终输出评估结果. # 代码说明 开头的非函数式语句是每次运行都需要的基础数据的定义和计算. ## save_to_csv(res, filename): res 是需要存储的数据,filename是存储的文件名字,函数的主要目的是避免保存文件时文件被占用使得程序被迫中断. ## cal_user_q_list(lis=recall_set_NO): lis 是召回集列表,默认为全局变量recall_set_NO指定.返回在召回集内的用户-问题列表. ## cal_user_tag_list_or_matrix(set_NO, is_list=False): set_NO是所需计算的集合编号,is_list指定表示返回的类型,默认返回矩阵,行为user,列为标签编号,is_list为True时,返回列表. 返回的内容是用户提出的问题的所有标签. 用户提出的标签可能有所重复, matrix将这种重复次数存储在matrix\[user_id\]\[tag_id\]中,list不重复存储. ## cal_testset(): 返回测试集对应的user-tag 列表 ## cal_q_simularity_based_on_tag(to_save=False): 需要保存结果时,设置to_save为True. 基于问题带有的标签计算问题之间的杰卡德相似度 ## find_top_x_in_q(user_info, simu_matrix, x, is_q=0): user_info是用户的标签列表,simu_matrix是问题相似度矩阵中根据用户问题切片得到的,是用户提过的问题在相似度矩阵中对应的行提取并拼接出来的新的临时矩阵. x 代表前多少个问题,is_q是数据格式问题(问题从1开始),并且是历史遗留问题(当时把标签和问题的topk算法写在一起,当时标签索引是从0开始的),不要过多的关注. 这是一个自创的topk算法,用于针对这种不仅需要知道topk的值,还需要知道topk索引的问题.首先创建一个临时列表存储所有大于0的数(相似度为0不可能被成为最终结果),从大到小排序,取第k个值,称作分界点.大于这个值的,就是topk. 重新遍历所有变量,对于大于分界点的,存储问题索引-相似度值字典. 遍历完毕后,再对字典内按照相似度从大到小排序得到排序好的元组(index,simularity)列表. ## find_top_x_in_tag(user_tag, simu_matrix, x): 思想同上,但是取的是与用户提出的所有标签的相似度的和的topk. ## cal_posib_intere_tag_based_on_user_q(top_x_q, top_x_tag, to_save=False, filename="posib_intere_tag_based_on_user_q.csv"): 核心算法,基于用户问题相似度推荐用户可能感兴趣的标签. top_x_q是挑选前多少个可能感兴趣的问题,top_x_tag用于指定这些问题转成标签-出现次数后,出现次数排名前top_x_tag的标签. 需要保存结果则调用时设置to_save为True. filename也可以设置,有默认值.返回推荐列表和带权值的推荐矩阵 ## cal_tag_similarity_based_on_user_specific(to_save=False): 基于用户计算标签相似度. ## cal_posib_intere_tag_based_on_user_tag(x, to_save=False, filename="posib_intere_tag_based_on_user_tag.csv"): 核心算法,基于用户标签相似度推荐用户可能感兴趣的标签. x是挑选前多少个可能感兴趣的问题,. 需要保存结果则调用时设置to_save为True. filename也可以设置,有默认值. 返回推荐列表和带权值的推荐矩阵 ## normlize(matrix): 矩阵归一化,用于合并两种方案的到的结果 ## evaluate_based_on_user_tag(res_file_name, recall_list_list, test_list_list, to_save=False): 召回结果的评估算法. 参数说明略. ## F1_score(tuple): tuple中存储(准确率,召回率),用于计算F1性能指标 ## main 有些中间结果是基于全部数据计算的,不会随着测试集变化而变化,所以不放在循环内. 循环内指定了不同测试集,计算被更改训练集测试集影响的中间结果,然后进行召回,结果归一化,合并,评估. p1是第一种方案的召回列表,m1是对应的带权值矩阵,同理,p2,m2略. 矩阵归一化后合并,得到最终的带权值推荐矩阵.送入下一级训练. 召回列表用于准确率和召回率的评估.最终程序输出评估的结果.