基于协同过滤的音乐推荐算法实现
导入相关模块
import pandas as pd
import numpy as np
# import time
import sqlite3
读取、清洗数据
# 读取数据
triplet_dataset = pd.read_csv(filepath_or_buffer=data_home+'train_triplets.txt',
sep='\t', header=None,
names=['user','song','play_count'], nrows=50000)
#读取原始数据集
triplet_dataset = pd.read_csv(filepath_or_buffer=data_home+'train_triplets.txt',sep='\t',
header=None, names=['user','song','play_count'])
# 只保留10W名用户的数据,其余过滤掉 排序后 前面的用户重要性远高于后面的用户的重要性
triplet_dataset_sub = triplet_dataset[triplet_dataset.user.isin(user_subset) ]
del(triplet_dataset)
# 只保留3W首歌曲的数据,其余也过滤掉
triplet_dataset_sub_song = triplet_dataset_sub[triplet_dataset_sub.song.isin(song_subset)]
del(triplet_dataset_sub)
基于歌曲相似度的推荐
算法实现如下:
# 为防止内存溢出,加快程序运行速度,只选取其中一些数据进行训练
song_count_subset = song_count_df.head(n=3000)
user_subset = list(play_count_subset.user)
song_subset = list(song_count_subset.song)
triplet_dataset_sub_song_merged_sub = triplet_dataset_sub_song_merged[triplet_dataset_sub_song_merged.song.isin(song_subset)]
# 查看一下数据
triplet_dataset_sub_song_merged_sub.head()
# 计算相似度得到推荐结果
train_data, test_data = train_test_split(triplet_dataset_sub_song_merged_sub, test_size = 0.30, random_state=0)
is_model = Recommenders.item_similarity_recommender_py()
is_model.create(train_data, 'user', 'title')
user_id = list(train_data.user)[7]
user_items = is_model.get_user_items(user_id)
得到的推荐结果如下:
结语
好了,今天的代码分享就到这了,明天见。
标签:subset,协同,sub,triplet,song,dataset,算法,过滤,user From: https://www.cnblogs.com/wephiles/p/17974568