用Python创建音乐推荐系统,下一个“网易云音乐”创建者就是你!( 二 )


推荐系统
用Python创建音乐推荐系统,下一个“网易云音乐”创建者就是你!文章插图
基于内容的推荐系统
CBRS根据项目的特征和其他项目元素之间的相似性推荐项目 。 假设用户已经看过喜剧类型的电影 , CBRS将推荐同样属于喜剧类型的电影 。
协同过滤推荐系统
用户偏好和态度被认为是创建cfr的基础 。 CFRS推荐的项目与用户已经选择的相似 。 我们将使用皮尔逊相关来计算相似轨迹之间的关系 。
用Python创建音乐推荐系统,下一个“网易云音乐”创建者就是你!文章插图
为什么我们使用协同而不是关联?
关联只描述了两个变量之间的关系 , 而协同不仅描述了两个变量之间的关系 , 还描述了两个变量之间的强度 。 因此 , 当我们创建一个协同过滤推荐系统时 , 我们使用相关性 。
用Python创建音乐推荐系统,下一个“网易云音乐”创建者就是你!文章插图
开始编写代码
首先 , 我们创建流行的播放列表 。
import pandas as pdsongmetadata = http://kandian.youth.cn/index/pd.read_csv(r'E:\Analytics\song_data.csv')othersongdata = http://kandian.youth.cn/index/pd.read_fwf(r'E:\Analytics\10000.txt’)songmetadata = http://kandian.youth.cn/index/pd.DataFrame(songmetadata)othersongdata.columns = ['user_id','song_id','listen_count’]song_df = pd.merge(othersongdata, songmetadata.drop_duplicates(['song_id']), on="song_id“, how ="left“)song_grouped = song_df.groupby(['title']).agg({"listen_count":"count"})grouped_sum = song_grouped['listen_count'].sum()#计算每首歌曲在收听计数中所占的百分比song_grouped['percentage'] = song_grouped['listen_count'].div(grouped_sum)*100#根据侦听计数对数据集排序song_grouped = song_grouped.sort_values(['listen_count'],ascending = True)song_df = song_df['listen_count'].astype(float)popular = song_grouped.sort_values(by = 'listen_count')#筛选数据集中的前十首歌曲popularsongs = popular[9517:9567]popularsongs = pd.DataFrame(popularsongs.reset_index())popularsongs.sort_values('listen_count', ascending = False)popularsongs
用Python创建音乐推荐系统,下一个“网易云音乐”创建者就是你!文章插图
现在我们将制作CFR并创建个性化播放列表 , 推荐系统的结果如下:
用Python创建音乐推荐系统,下一个“网易云音乐”创建者就是你!文章插图
import numpy as npimport pandas as pdsongmetadata = http://kandian.youth.cn/index/pd.read_csv(r'E:\Analytics\song_data.csv')othersongdata = http://kandian.youth.cn/index/pd.read_fwf(r'E:\Analytics\10000.txt')othersongdata.columns = ['user_id','song_id','listen_count’]song_df = pd.merge(othersongdata, songmetadata.drop_duplicates(['song_id']), on="song_id", how="left")song_grouped = pd.DataFrame(song_df.groupby('song_id')['listen_count'].count())song_grouped = pd.DataFrame(song_df.groupby('song_id')['listen_count'].count())song_df.astype({'listen_count': 'int32'},{'song_id':'str'}).dtypessong_df[song_df['song_id'] == 'SOFVZRE12A8C139783']songs_crosstab = pd.pivot_table(song_df, values = 'listen_count', index = 'user_id', columns = 'song_id’)songs_crosstab.head()predictor_song_ratings = songs_crosstab['SOFVZRE12A8C139783']predictor_song_ratings[predictor_song_ratings>= 1]similar_songs = songs_crosstab.corrwith(predictor_song_ratings)corr_listened_song = pd.DataFrame(similar_songs, columns = ['pearsonR'])corr_listened_song.dropna(inplace = True)predictor_corr_summary =corr_listened_song.join(song_grouped['listen_count'])predictor_corr_summary = predictor_corr_summary.sort_values('pearsonR', ascending = False)final_recommended_songs = predictor_corr_summary[predictor_corr_summary.pearsonR < 0.9999]final_recommended_songs.sort_values('pearsonR', ascending = False)final_recommended_songs = final_recommended_songs.reset_index()song_df_one = song_df.drop(['listen_count'], axis=1)similar_songs = pd.merge(final_recommended_songs, song_df_one.drop_duplicates(["song_id"]), on="song_id", how="left")similar_songs = similar_songs.sort_values('pearsonR', ascending = False)similar_songs.head(50)
用Python创建音乐推荐系统,下一个“网易云音乐”创建者就是你!文章插图
以上 。 有从事算法推荐岗位的同学不妨练习起来!在很多音乐推荐或者电商推荐里 , 使用的算法会有一定的偏差 , 音乐推荐算法主要考量的数据是你听得次数最多的、收藏等 , 赶紧行动起来!
--END--
翻译:未艾信息(www.weainfo.net)
查看更多最新资讯 , 欢迎大家点击阅读原文登录我们的AI社区 。
以及关注我们的公众号:为AI呐喊(weainahan)