python推荐歌单算法问题案例

题目描述

假设已有若干用户名字及其喜欢的音乐歌曲清单,现假设有用户A,已听过并喜欢一些歌曲,现在想找一首新歌曲听听,又不知道听什么好。
思路:根据已有数据,查找与该用户A爱好最相似的用户B,也就是听过并喜欢的音乐歌曲与该用户A最接近,然后从用户B喜欢的音乐列表中选取一个当前用户A还没有听过的歌曲,进行推荐
代码采用字典嵌套集合(听过并喜欢的歌曲)来存放数据,格式为{用户1:{歌曲名称1,歌曲名称2,等等},用户2:{.-}}

实现代码

def find_similar_user(user_dict, target_user):
    max_similarity = -1
    similar_user = None
    
    for user, songs in user_dict.items():
        if user == target_user:
            continue
        
        similarity = len(songs.intersection(user_dict[target_user]))
        if similarity > max_similarity:
            max_similarity = similarity
            similar_user = user
    
    return similar_user

def recommend_song(user_dict, target_user):
    similar_user = find_similar_user(user_dict, target_user)
    
    if similar_user is None:
        return "No recommendation available."
    
    target_songs = user_dict[target_user]
    similar_songs = user_dict[similar_user]
    
    for song in similar_songs:
        if song not in target_songs:
            return song
    
    return "No recommendation available."

# 示例数据
user_dict = {
    "A": {"Song1", "Song2", "Song3"},
    "B": {"Song2", "Song4", "Song5"},
    "C": {"Song1", "Song2", "Song6"},
    "D": {"Song3", "Song7", "Song8"}
}

target_user = "A"
recommendation = recommend_song(user_dict, target_user)
print("Recommended song for {}: {}".format(target_user, recommendation))

在上述代码中,find_similar_user 函数用于找到与目标用户最相似的用户,即喜欢的歌曲与目标用户最接近。然后,recommend_song 函数根据找到的相似用户给出一个新的推荐歌曲。

在示例数据中,用户 A 喜欢 “Song1″、”Song2” 和 “Song3″,那么根据与用户 A 最相似的用户 B(喜欢 “Song2″、”Song4” 和 “Song5″),我们可以推荐给用户 A “Song4” 或 “Song5” 中的一个。

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享