协同过滤 Item-Based 推荐系统准确性

Collaborative Filtering Item-Based Recommender System Accuracy

我正在尝试寻找一种方法来了解我的推荐系统的准确性。我使用的方法是基于用户 X 电影矩阵创建 KNN 模型(其中内容是给定用户对给定电影的评分)。基于该模型,我有一个功能,我可以在其中输入电影标题,它 returns 对我来说是与我用作输入的电影更相似的电影。有了这个,我不知道如何衡量我的模型是否准确,以及显示的电影是否真的与我用作输入的电影相似。有什么想法吗?

这是我正在使用的数据集的示例

def create_sparse_matrix(df):
    sparse_matrix = sparse.csr_matrix((df["rating"], (df["userId"], df["movieId"])))
    
    return sparse_matrix

# getting the transpose - data_cf is the dataFrame name that I'm using
user_movie_matrix = create_sparse_matrix(data_cf).transpose() 

knn_cf = NearestNeighbors(n_neighbors=N_NEIGHBORS, algorithm='auto', metric='cosine')

knn_cf.fit(user_movie_matrix)
# Creating function to get movies recommendations based in a movie input.
def get_recommendations_cf(movie_name, model): 
    # Getting the ID of the movie based on it's title
    movieId = data_cf.loc[data_cf["title"] == movie_name]["movieId"].values[0]
    
    distances, suggestions = model.kneighbors(user_movie_matrix.getrow(movieId).todense().tolist(), n_neighbors=10)
    
    for i in range(0, len(distances.flatten())):
        if(i == 0):
            print('Recomendações para {0}: \n'.format(movie_name))
        else:
            print('{0}: {1}, com distância de {2}:'.format(i, data_cf.loc[data_cf["movieId"] == suggestions.flatten()[i]]["title"].values[0], distances.flatten()[i]))
    
    return distances, suggestions

调用推荐函数并显示推荐的每部电影的“距离”

翻译:

"Spider-Man 2 的建议:" = "Spider-Man 2 的建议:"

"1: Spider-Man, com distância de 0.30051949781903664" = "1: Spider-Man, 距离为 0.30051949781903664"

...

"9: Finding Nemo, com distância de 0.4844064554284505:" = "9: Finding Nemo, 距离为 0.4844064554284505:"

谈到推荐系统,衡量性能从来都不是一件简单的任务。这是因为我们在推荐中寻找许多理想的特征:准确性、多样性、新颖性……所有这些都可以通过某种方式来衡量。网络上有许多非常有用的文章涵盖了该主题。我将 link 一些具体处理精度的参考资料:

请记住,要进行任何类型的评估,您需要将数据拆分为训练集和测试集。对于推荐系统,由于所有用户和所有项目都必须同时出现在训练集和测试集中,因此您必须使用分层方法。这意味着您应该为每个用户留出一定比例的电影评论,而不是简单地对数据集进行抽样。