基于协同过滤算法的音乐推荐播放器系统

前言介绍

1.1 研究背景

随着互联网技术的飞速发展以及数字音乐市场的持续繁荣,音乐资源呈现出爆炸式的增长态势。在线音乐平台上汇聚了来自全球各地、各种风格和类型的海量音乐作品,其数量之多、种类之繁杂,让用户在寻找符合自己口味的音乐时面临着前所未有的挑战。传统的音乐查找方式,如按照歌手、专辑或者流派进行搜索,已经远远不能满足用户快速、精准地找到心仪音乐的需求。在这样的背景下,音乐推荐系统应运而生,它旨在帮助用户在浩如烟海的音乐库中发现自己可能喜欢的音乐,成为了连接用户和音乐资源的重要桥梁。

当下,诸多音乐推荐系统已投入使用,不过其中大部分都存在一定缺少,有些推荐系统仅仅依靠简易的协同过滤算法,按照用户之间的相似度来执行推荐,该方法较易受数据稀疏性以及冷启动问题的影响,从而致使推荐结果在准确性和多元性方面不太理想。部分推荐系统在推荐时未充分考虑音乐的内容特征,旋律,节奏,歌词等,所以推荐的音乐也许会与用户的实际喜好有所偏离,因而,创建一个依托大数据,而且能全面利用音乐内容特征和用户行为数据的音乐推荐系统有着非常重要的现实意义。

1.2研究目的意义

 本研究运用B/S架构开展系统开发工作,前端借助Vue框架搭建出有高度交互性的用户界面,切实提升了用户操作时的便捷程度与流畅状态,后端依据Django框架达成稳定可靠的服务支持,有力保障了系统运行效率以及数据传输性能,数据库层面选用MySQL来实现海量音乐数据的存储,并借助Python强大的数据处理能力,让管理员可以对用户信息、音乐分类、音乐详情等模块进行精细化管理控制。需要注意的是,系统借助协同过滤算法对用户行为记录、评分数据等行为特征展开深度剖析,精准识别用户偏好,为个体用户生成定制化的音乐推荐方案,从用户体验角度来看,本系统可大幅减少用户筛选音乐所消耗的时间,凭借精准匹配用户兴趣较大提高听音乐的满意度,充分契合多元化的娱乐需求。

01开发环境

1.1、Python语言

1.2、MySQL 数据库

1.3、django 框架

1.4、B/S 架构

1.5、协同过滤算法

02系统功能模块

亮点:协同过滤推荐算法

具体运用基于用户的协同过滤方法,借助解析用户收藏行为数据,辨别出和目标用户有着相似兴趣偏好的用户群体,再依照这些相似用户的历史记录为目标用户生成个性化的音乐推荐列表。

协同过滤算法的核心机制是依靠量化用户之间的相似性程度达成个性化推荐,在这个过程中,余弦相似度作为经典的相似性度量办法,在该领域得到了广泛运用。

余弦相似度计算公式:
在这里插入图片描述

03图片展示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

04部分代码展示

#协同过滤算法部分代码展示如下(交流学习+vx:S20231025S )
#查找相似用户
def cosine_similarity(a, b):
    numerator = sum([a[key] * b[key] for key in a if key in b])
    denominator = math.sqrt(sum([a[key]**2 for key in a])) * math.sqrt(sum([b[key]**2 for key in b]))
    return numerator / denominator
#收藏协同算法
def yinlexinxi_autoSort2(request):
    if request.method in ["POST", "GET"]:
        req_dict = request.session.get("req_dict")
        cursor = connection.cursor()
        sorted_recommended_goods=[]
        user_ratings={}
        try:
            cursor.execute("select * from storeup where type = 1 and tablename = 'yinlexinxi' order by addtime desc")
            desc = cursor.description
            data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]
            #用户-订单矩阵
            for item in data_dict:
                if user_ratings.__contains__(item["userid"]):
                    ratings_dict = user_ratings[item["userid"]]
                else:
                    user_ratings[item["userid"]] = {
                        str(item["refid"]):1
                    }
            try:
                # 计算目标用户与其他用户的相似度
                similarities = {other_user: cosine_similarity(user_ratings[request.session.get("params").get("id")], user_ratings[other_user])
                                for other_user in user_ratings if other_user != request.session.get("params").get("id")}
                # 找到与目标用户最相似的用户
                most_similar_user = sorted(similarities, key=similarities.get, reverse=True)[0]
                # 找到最相似但目标用户未购买过的商品
                recommended_goods = {goods: rating for goods, rating in user_ratings[most_similar_user].items() if
                                     goods not in user_ratings[request.session.get("params").get("id")]}
                # 按评分降序排列推荐
                sorted_recommended_goods = sorted(recommended_goods, key=recommended_goods.get, reverse=True)
            except:
                pass
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐