首页 > 解决方案 > 基于协同过滤项目的推荐系统准确性

问题描述

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

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

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

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

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

翻译:

"Recomendações para Spider-Man 2:" = "对蜘蛛侠 2 的推荐:"

"1: Spider-Man, com distância de 0.30051949781903664" = "1: Spider-Man, with distance of 0.30051949781903664"

...

"9: 海底总动员, com distância de 0.4844064554284505:" = "9: 海底总动员, 距离为 0.4844064554284505:"

标签: pythonmachine-learningknnevaluationrecommender-systems

解决方案


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

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


推荐阅读