在Python中的推荐系统

在python中的推荐系统

推荐系统是Python中的一个工具,它根据用户的偏好和过去的行为向用户推荐项目或内容。该技术利用算法来预测用户未来的偏好,从而为他们提供最相关的内容。

该系统的范围非常广泛,广泛应用于电子商务、流媒体服务和社交媒体等各个行业。产品、电影、音乐、书籍等都可以通过这些系统推荐。提供个性化推荐不仅有助于提高客户参与度和忠诚度,还可以促进销售。

推荐系统的类型

基于内容的推荐系统

这些操作的理念是,用户可以获得与他们以前接触过的项目相当的推荐。这种系统利用算法来查明与用户偏好非常相似的项目,目的是创建适合用户的建议列表。在此设置中,算法分析与商品相关的数据(例如其质量和用户评分),以确定提出哪些建议。

算法

步骤 1 − 导入必要的库

立即学习“Python免费学习笔记(深入)”;

第 2 步 – 加载数据集

步骤 3 – 预处理数据

步骤 4 – 计算相似性矩阵

第5步 − 对于每个用户 −

选择他们已经互动过的项目

对于在步骤5a中选择的每个项目 –

检索与所有其他项目的相似度分数

使用用户的评分作为权重,计算相似度分数的加权平均值

根据加权相似度分数按降序对项目进行排序

向用户推荐前N个项目

第六步 – 返回所有用户的推荐。

示例

import pandas as pdfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.metrics.pairwise import cosine_similarity# Load datadata = pd.read_csv('movies.csv')# Compute TF-IDF vectors for each movietfidf = TfidfVectorizer(stop_words='english')tfidf_matrix = tfidf.fit_transform(data['description'])# Compute cosine similarity between all moviescosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)# Function to get top 10 similar movies based on input moviedef get_recommendations(title):   idx = data[data['title'] == title].index[0]   sim_scores = list(enumerate(cosine_sim[idx]))   sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)   sim_scores = sim_scores[1:11]   movie_indices = [i[0] for i in sim_scores]   return data.iloc[movie_indices]# Example usage: get top 10 movies similar to 'The Godfather'get_recommendations('The Godfather')

我们从本地CSV文件加载电影数据到一个数据帧中。我们通过使用fit_transform()函数将电影描述转换为矩阵,并计算余弦相似性矩阵。

然后我们定义一个函数,它以电影标题作为参数,并在数据帧中检索电影标题的索引(如果存在)。

然后我们创建一个包含传递的电影标题与所有其他电影标题之间相似度分数的元组列表。每个元组由索引和相似度分数组成。然后我们通过索引数据框来显示电影标题的列表。

输出

                                title  783                 The Godfather   1512          The Godfather: Part II   1103                       Casino   3509  Things to Do in Denver When   1246                       Snatch   3094             Road to Perdition   2494                     Scarface   1244                    Following   2164                       Dancer   2445        The Day of the Jackal   

协同过滤推荐系统

相反,这些依赖于其他用户的数据来生成推荐。这种系统会比较各种用户的偏好和行为,然后建议其他具有类似口味的用户可能喜欢的物品。与基于内容的系统相比,协同过滤通常更准确,因为它在生成推荐时考虑了许多用户的意见。

算法

步骤 1 − 导入必要的库。

第 2 步 – 加载可提供用户评分的“ ratings.csv”文件。

第 3 步 – 创建“user_item_matrix”以将用户评分数据转换为矩阵

第 4 步 – 使用余弦相似度计算用户评分的相似度。

第 5 步 – 识别相似用户

第 6 步 – 计算平均评分。

步骤 7 – 选择目标用户 ID。

第 8 步 – 打印电影 ID 和评级。

示例

import pandas as pdfrom sklearn.metrics.pairwise import cosine_similarity# Load dataratings_data = pd.read_csv('ratings.csv')# Create user-item matrixuser_item_matrix = pd.pivot_table(ratings_data, values='rating', index='userId', columns='movieId')# Calculate cosine similarity between usersuser_similarity = cosine_similarity(user_item_matrix)# Get top n similar users for each userdef get_top_similar_users(similarity_matrix, user_index, n=10):    similar_users = similarity_matrix[user_index].argsort()[::-1]    return similar_users[1:n+1]# Get recommended items for a user based on similar usersdef get_recommendations(user_id, user_similarity, user_item_matrix, n=10):   similar_users = get_top_similar_users(user_similarity, user_id, n)   recommendations = user_item_matrix.iloc[similar_users].mean(axis=0).sort_values(ascending=False).head(n)   return recommendations# Example usageuser_id = 1recommendations = get_recommendations(user_id, user_similarity, user_item_matrix)print("Top 10 recommended movies for user", user_id)print(recommendations)

输出

Top 10 recommended movies for user 1movieId1196        5.00000050            5.0000001210        5.000000260          5.0000001198        5.0000002571        5.000000527          5.0000001197        5.0000002762        5.000000858          4.961538

结论

创建推荐系统任务可能会给程序员带来极大的复杂性,但它是一个有价值的工具,可以带来巨大的好处。利用 Python 构建推荐系统提供了多种选项,可以简化创建和定制过程。然而,与任何编码工作一样,开发推荐系统时可能会出现潜在问题。意识到这些典型的并发症并采取措施解决它们对于确保推荐系统的成功至关重要。

最终,重要的是要记住,推荐系统可以是一种非常强大的资产,因此值得投入必要的时间和精力来确保其正确构建并以最佳方式运行。

以上就是在Python中的推荐系统的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1342992.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何用Python编写计算乘方的算法?
上一篇 2025年12月13日 06:04:24
Excel 将其提升到新的水平:最新更新中的无缝 Python 集成
下一篇 2025年12月13日 06:04:27

相关推荐

  • Matplotlib 地图中多类型图例的创建与优化

    Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化

    本教程旨在解决matplotlib地图可视化中,如何在一个图例中同时展示颜色块(如区域分类)和自定义标记(如特定兴趣点)的问题。文章详细介绍了当传统`patch`对象无法正确显示标记时,如何利用`matplotlib.lines.line2d`创建标记图例句柄,并将其与颜色块图例句柄合并,从而生成一…

    2026年5月10日 用户投稿
    900
  • 利用海象运算符简化条件赋值:Python教程与最佳实践

    本文旨在探讨Python中海象运算符(:=)在条件赋值场景下的应用。通过对比传统if/else语句与海象运算符,以及条件表达式,分析海象运算符在简化代码、提高可读性方面的优势与局限性。并通过具体示例,展示如何在列表推导式等场景下合理使用海象运算符,同时强调其潜在的复杂性及替代方案,帮助开发者更好地掌…

    2026年5月10日
    300
  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    300
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • Python命令怎样使用profile分析脚本性能 Python命令性能分析的基础教程

    使用Python的cProfile模块分析脚本性能最直接的方式是通过命令行执行python -m cProfile your_script.py,它会输出每个函数的调用次数、总耗时、累积耗时等关键指标,帮助定位性能瓶颈;为进一步分析,可将结果保存为文件python -m cProfile -o ou…

    2026年5月10日
    000
  • Python递归函数追踪与性能考量:以序列打印为例

    本文深入探讨了Python中一种递归打印序列元素的方法,并着重演示了如何通过引入缩进参数来有效追踪递归函数的执行流程和参数变化。通过实际代码示例,文章揭示了递归调用可能带来的潜在性能开销,特别是对调用栈空间的需求,以及Python默认递归深度限制可能导致的错误,为读者提供了理解和优化递归算法的实用见…

    2026年5月10日
    000
  • python中zip函数详解 python多序列压缩zip函数应用场景

    zip函数的应用场景包括:1) 同时遍历多个序列,2) 合并多个列表的数据,3) 数据分析和科学计算中的元素运算,4) 处理csv文件,5) 性能优化。zip函数是一个强大的工具,能够简化代码并提高处理多个序列时的效率。 在Python中,zip函数是一个非常有用的工具,它能够将多个可迭代对象打包成…

    2026年5月10日
    300
  • Python中怎样使用pymongo?

    在python中使用pymongo可以轻松地与mongodb数据库进行交互。1)安装pymongo:pip install pymongo。2)连接到mongodb:from pymongo import mongoclient; client = mongoclient(‘mongod…

    2026年5月10日
    000
  • Python 函数参数类型:如何使用可变参数和动态参数?

    python 中的参数类型:关键词参数、可变参数和动态参数 在 python 中,函数的参数可以分为以下几种类型: 关键词参数(kw)**:这些参数具有名称,并且在调用函数时明确指定。可变参数(*args):这些参数没有名称,允许函数接受任意数量的位置参数。它们将被收集到一个元组中。动态参数(kwa…

    2026年5月10日
    000
  • pycharm解析器怎么添加 解析器添加详细流程

    在pycharm中添加解析器的步骤包括:1) 打开pycharm并进入设置,2) 选择project interpreter,3) 点击齿轮图标并选择add,4) 选择解析器类型并配置路径,5) 点击ok完成添加。添加解析器后,选择合适的类型和版本,配置环境变量,并利用解析器的功能提高开发效率。 在…

    2026年5月10日
    100
  • python中numpy的用法

    NumPy是Python中用于科学计算的强大库,它提供了以下功能:多维数组处理矩阵运算快速傅里叶变换(FFT)线性代数随机数生成 NumPy在Python中的强大功能 NumPy是Python中用于科学计算的一个强大且灵活的库。它提供了用于处理多维数组和矩阵的一组高效工具,是数据分析和机器学习项目的…

    2026年5月10日
    100
  • python如何捕获所有类型的异常_python try except捕获所有异常的方法

    答案:捕获所有异常推荐使用except Exception as e,可捕获常规错误并记录日志,避免影响程序正常退出;需拦截系统信号时才用except BaseException as e。 在Python中,要捕获所有类型的异常,最常见且推荐的方法是使用 except Exception as e…

    2026年5月10日
    300
  • python中f怎么用

    f-字符串是 Python 3.6 中引入的格式化字符串语法糖,提供了简洁且安全的方式来插入表达式和变量。f-字符串以字符串前缀 f 为标志,使用大括号包含表达式或变量。f-字符串支持条件表达式和格式规范符,提供了更大的灵活性、安全性、可读性和易维护性。 在 Python 中使用 f-字符串 f-字…

    2026年5月10日
    100
  • 怎么在手机上把XML文件转换为PDF?

    不可能直接在手机上用单一应用完成 XML 到 PDF 的转换。需要使用云端服务,通过两步走的方式实现:1. 在云端转换 XML 为 PDF,2. 在手机端访问或下载转换后的 PDF 文件。 怎么在手机上把XML文件转换为PDF? 这问题问得好,比直接问“怎么转换”有深度多了!因为它触及了移动端环境的…

    2026年5月10日
    000
  • ReCAPTCHA V3低分处理策略:结合V3与V2实现智能风险控制与用户验证

    本文旨在解决ReCAPTCHA V3在低分情况下无法直接触发验证码挑战的问题。我们将探讨如何通过巧妙地结合ReCAPTCHA V3的无感评分机制与ReCAPTCHA V2的交互式挑战,实现一套既能有效阻挡机器人流量,又能最大限度减少对合法用户干扰的智能验证系统。文章将详细阐述其实现原理、前端与后端集…

    2026年5月10日
    100
  • Python正则表达式:处理数字不同情况的替换

    本文旨在帮助读者理解和解决在使用Python正则表达式进行数字替换时遇到的问题。通过具体示例,详细解释了如何正确匹配和替换不同格式的数字,避免常见的匹配陷阱,并提供可直接使用的代码示例。掌握这些技巧,能有效提高处理文本数据的效率和准确性。 在使用Python的re模块进行字符串替换时,正则表达式的编…

    2026年5月10日
    000
  • python的tuple什么意思

    元组是Python中一种有序、不可变的序列数据结构。用于存储相关数据,例如坐标、个人信息或枚举值。创建方式:圆括号(),元素以逗号,分隔。访问元素:索引运算符;遍历元素:for循环。 什么是Python中的Tuple? Tuple,中文称为元组,是Python中一种有序、不可变的序列数据结构。 特点…

    2026年5月10日
    000
  • Python官网用户调查的参与方式_Python官网反馈提交详细教程

    答案是通过访问Python官网新闻页面、邮件邀请链接或GitHub仓库提交反馈。具体为:访问官网查找用户调查公告,或点击邮件中的专属链接参与,在GitHub的cpython仓库提交技术建议,并注意如实填写问卷与保护隐私。 如果您希望参与Python官网的用户调查并提交反馈,可以通过官方指定的渠道完成…

    2026年5月10日
    300
  • 我有时使用 awk 而不是 Python 的四个原因

    Python 是一门强大的编程语言,但在某些特定场景下,Awk 的优势更为显著,尤其体现在可移植性、生命周期、代码简洁性和与其他工具的互操作性方面。 Python 脚本通常具有良好的可移植性,但并非总能在所有环境中完美运行,例如流行的 Docker 基础镜像 (如 Debian 和 Alpine)。…

    2026年5月10日
    000
  • Python字符串格式化进阶:解包与f-string的巧妙应用

    本文深入探讨了Python中字符串格式化的多种方法,重点讲解了元组解包与f-string的结合使用。通过示例代码,详细比较了%操作符、str.format()方法以及f-string在元组解包场景下的应用,并提供了在f-string中使用斜杠分隔符的更简洁方案,旨在帮助读者掌握更高效、更易读的字符串…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信