python - 基于协同过滤项目的推荐系统准确性
问题描述
我正在尝试找到一种方法来了解我的推荐系统的准确性。我使用的方法是基于用户 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:"
解决方案
对于推荐系统,衡量性能从来都不是一项简单的任务。这是因为我们在推荐中寻找许多理想的特征:准确性、多样性、新颖性……所有这些都可以通过某种方式来衡量。网络上有许多非常有用的文章涵盖了该主题。我将链接一些具体处理精度的参考资料:
- https://towardsdatascience.com/ranking-evaluation-metrics-for-recommender-systems-263d0a66ef54
- https://en.wikipedia.org/wiki/Evaluation_measures_(information_retrieval)
请记住,要进行任何类型的评估,您需要将数据拆分为训练集和测试集。在推荐系统的情况下,由于所有用户和所有项目都必须在训练集和测试集中都有表示,因此您必须使用分层方法。这意味着您应该为每个用户留出一定比例的电影评论,而不是简单地从数据集中采样行。
推荐阅读
- oracle-apex - 我如何获取无线电组值 oracle apex
- ios - iOS:匹配大手机显示屏和小手机显示屏的视图
- sql-server - 使用 SQL Server 代理计划作业
- javascript - Grafana:从面板插件配置 InfluxDB 查询。在从 typescript 设置值后使用 html 输入元素出现问题
- android - 从 CustomAdapter 返回到 Activity
- vb.net - WebClient 无法从网站 API 路径下载字符串
- flutter - 如何将地图 JSON 列表获取到 DropdownMenuItem?
- javascript - 解析错误 [{{}}] 或使用净化不安全 url
- postman - 在 POSTMAN 中为 API 运行多个测试数据时,请求中未替换 CSV 文件数据
- php - 使用 PHP 和 Ajax 下载 HTML 页面