协同过滤 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 一些具体处理精度的参考资料:
- https://towardsdatascience.com/ranking-evaluation-metrics-for-recommender-systems-263d0a66ef54
- https://en.wikipedia.org/wiki/Evaluation_measures_(information_retrieval)
请记住,要进行任何类型的评估,您需要将数据拆分为训练集和测试集。对于推荐系统,由于所有用户和所有项目都必须同时出现在训练集和测试集中,因此您必须使用分层方法。这意味着您应该为每个用户留出一定比例的电影评论,而不是简单地对数据集进行抽样。
我正在尝试寻找一种方法来了解我的推荐系统的准确性。我使用的方法是基于用户 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 一些具体处理精度的参考资料:
- https://towardsdatascience.com/ranking-evaluation-metrics-for-recommender-systems-263d0a66ef54
- https://en.wikipedia.org/wiki/Evaluation_measures_(information_retrieval)
请记住,要进行任何类型的评估,您需要将数据拆分为训练集和测试集。对于推荐系统,由于所有用户和所有项目都必须同时出现在训练集和测试集中,因此您必须使用分层方法。这意味着您应该为每个用户留出一定比例的电影评论,而不是简单地对数据集进行抽样。