利用机器学习创建基于位置的推荐程序
推荐系统被广泛应用于不同的应用程序中,用于预测用户对产品或服务的偏好或评价。在过去的几分钟或几小时里,你很可能在网上遇到过或与某种类型的推荐系统进行过互动。这些推荐系统有不同的类型,其中最突出的包括基于内容的过滤和协作过滤。在本文中,我们将研究基于地理位置的推荐,我们特别关注地理位置,以便利用用户的地理位置提供更相关的推荐。
为了说明基于位置的推荐器的关键方面,我们将使用 K-Means 算法和来自 Kaggle 的 Yelp 数据集执行一个简单的基于位置的推荐。数据是 JSON 文件,可以用 pandas 轻松读取。
下表显示了数据集的前 5 行。表中提供了企业坐标、评级星级和每家企业的评论数量。

探索性数据分析(EDA)与预处理
在本节中,我们将探索并预处理数据集。该数据集包含来自 yelp 用户的评论,并包含许多类别。为了简化我们的分析和对推荐模型的解释,我们将把重点放在餐馆上,您也可以选择您感兴趣的其他类别。
我们首先通过过滤所有包含 "餐馆 "一词的业务来创建一个餐馆数据帧。然后,我们绘制出餐厅星级从 1 星到 5 星的分布图。从图中可以清楚地看出,大多数餐厅的星级为 4.0 或 3.5 星,只有少数餐厅的星级为 5.0 星。

我们还可以根据评论数和星级创建一个排序数据框架,并将数据集中排名前 20 位的餐厅可视化。
这里不仅要根据星级对餐厅进行排序,还要根据餐厅的评论数量进行排序。以下是数据集中所有排名前 20 的餐厅的分布图。
最后,在进入 K-Means 聚类和基于位置的推荐之前,让我们也探索一下这些餐厅的位置,并将其可视化为一张地图。我们将使用 Plotly Express 库,该库提供了一种灵活简便的方法,可以用漂亮的底图绘制地理数据。
为了定制我们的推荐系统,我们将只关注内华达州的拉斯维加斯,因为该数据集中的餐厅数量最多。
我们为拉斯维加斯的所有餐馆绘制了放大地图。下面是拉斯维加斯所有餐厅的地图。地图的颜色基于餐厅的星级数量,而大小则表示该餐厅的评论数量。如您所见,评价较高的餐厅都集中在市中心。
K-Means 聚类
在执行 K-Means 聚类算法之前,我们首先要确定数据集的最佳聚类数量。在这里,我们使用了一种名为 Elbow 方法的技术。
弯头法可以帮助我们确定合适的聚类数量。这并不能给出准确的聚类数量,但有可能帮助我们选择聚类的数量。从下图可以看出,它有多个弯头。
在肘法的帮助下,我们选择了 5 个聚类,并对坐标执行 K-Means 聚类算法。我们还在 lasVegas 数据帧中填充了一列新内容。
最后,我们绘制了 K-Means 算法的聚类散点图。该图清晰地显示了算法的输出结果,有 5 个聚类。

基于位置的推荐
在本节中,我们将把 K 均值聚类和餐厅评级结合起来,根据用户的位置推荐餐厅。首先,让我们创建一个数据帧,根据评论数和星级对拉斯维加斯的餐厅进行排序。我们将其称为 DataFrametop_restaurants_lasVegas。
我们准备创建一个根据用户位置推荐餐厅的函数。我们创建一个根据用户位置推荐餐厅的函数。
在这里,我们的函数将接收经纬度和数据帧。函数首先会预测坐标属于哪个集群,然后进一步将数据帧限制在该集群中,并返回该集群中排名前 5 的餐馆。
这个函数很简单,只接受坐标,但我们可以进一步开发,接受其他输入,如地址或邮编。这需要一些地理编码应用程序,所以现在只需说明基于位置的推荐功能就足够了。在使用推荐函数之前,让我们先创建一个测试数据帧。
现在,我们可以将数据帧中的任何用户作为输入,使用我们的推荐函数来测试我们基于位置的简单推荐的功能。请记住,这些测试数据只是为了方便,推荐函数可以直接接受任何给定的坐标。
对于第一个用户,K-Means 算法会预测聚类,并找出该聚类中排名前 5 的餐厅并进行推荐。红点为用户所在位置,蓝点为推荐餐厅。
让我们再举一个例子,本例中的用户 3。我们的 "recommend_restaurant "函数会再次预测该用户所属的群组,并从中选出该群组中排名前 5 的餐厅。
结论
在本教程中,我们使用 Yelp 数据集演示了基于位置的 python 推荐。我们使用餐馆来展示基于位置的推荐应用。我们的推荐系统使用基于餐厅坐标的 K-Means 聚类,并且只考虑餐厅的评级(评级数和星级)来推荐餐厅。我们还可以考虑餐厅的类型来定制推荐。这一点还可以进一步发展,纳入其他输入方法,如地址或邮政编码。最后,虽然 K-means 聚类限制了推荐餐厅的范围,但我们的推荐并没有明确考虑用户与推荐餐厅之间的距离。
相关文章:
利用机器学习创建基于位置的推荐程序
推荐系统被广泛应用于不同的应用程序中,用于预测用户对产品或服务的偏好或评价。在过去的几分钟或几小时里,你很可能在网上遇到过或与某种类型的推荐系统进行过互动。这些推荐系统有不同的类型,其中最突出的包括基于内容的过滤和协作过滤。在…...
每日一题 429. N 叉树的层序遍历
429. N 叉树的层序遍历 /*class Solution { public:vector<vector<int>> levelOrder(Node* root) {queue<Node*> que;que.push(root);vector<vector<int>> ans;if(root nullptr){return ans;}while(!que.empty()){int sizeQue que.size();vec…...
AIP-132 标准方法:List
编号132原文链接AIP-132: Standard methods: List状态批准创建日期2019-01-21更新日期2022-06-02 在许多API中,通常会向集合URI(例如 /v1/publishers/1/books )发出GET请求,获取集合中资源的列表。 面向资源设计(AIP…...
CSAPP学习:前言
前言 本书简称CS:APP。 背景知识 一些基础的C语言知识 如何阅读 Do-做系统 在真正的系统上解决具体的问题,或是编写和运行程序。 章节 2025-1-27 个人认为如下章节将会对学习408中的操作系统与计算机组成原理提供帮助,于是先凭借记忆将其简单…...
【统计的思想】假设检验(二)
假设检验是根据人为设定的显著水平,对被测对象的总体质量特性进行统计推断的方法。 如果我们通过假设检验否定了零假设,只是说明在设定的显著水平下,零假设成立的概率比较小,并不是说零假设就肯定不成立。如果零假设事实上是成立…...
KNN算法学习实践
1.理论学习 原文链接 ShowMeAI知识社区 2.案例实践 假如一套房子打算出租,但不知道市场价格,可以根据房子的规格(面积、房间数量、厕所数量、容纳人数等),在已有数据集中查找相似(K近邻)规格…...
数据可视化的图表
1.折线图反映了一段时间内事物连续的动态变化规律,适用于描述一个变量随另一个变量变化的趋势,通常用于绘制连续数据,适合数据点较多的情况。 2.散点图是以直角坐标系中各点的密集程度和变化趋势来表示两种现象间的相关关系,常用于显示和比较数值。当要在不考虑时间…...
动手学深度学习-卷积神经网络-3填充和步幅
目录 填充 步幅 小结 在上一节的例子(下图) 中,输入的高度和宽度都为3,卷积核的高度和宽度都为2,生成的输出表征的维数为22。 正如我们在 上一节中所概括的那样,假设输入形状为nhnw,卷积核形…...
【JS|第28期】new Event():前端事件处理的利器
日期:2025年1月24日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方…...
Spring Boot 中的事件发布与监听:深入理解 ApplicationEventPublisher(附Demo)
目录 前言1. 基本知识2. Demo3. 实战代码 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 基本的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全&am…...
【Spring】Spring启示录
目录 前言 一、示例程序 二、OCP开闭原则 三、依赖倒置原则DIP 四、控制反转IOC 总结 前言 在软件开发的世界里,随着项目的增长和需求的变化,如何保持代码的灵活性、可维护性和扩展性成为了每个开发者必须面对的问题。传统的面向过程或基于类的设计…...
ospf动态路由配置,cost路径调整,ospf认证实验
一、实验拓扑如图: 接口ip配置网络 :10.17.12.* 10.17.13.* ,10.17.23.* 回环接口配置分别为 10.0.1.1 ,10.0.1.2,10.0.1.3对应三台路由器 ar1配置接口ip interface GigabitEthernet0/0/0 ip address 10.17.12.1…...
在Rust应用中访问.ini格式的配置文件
在Rust应用中访问.ini格式的配置文件,你可以使用第三方库,比如 ini 或 config. 下面是一个使用 ini 库的示例,该库允许你读取和解析.ini文件。 使用 ini 库 添加依赖 首先,你需要在你的 Cargo.toml 文件中添加 ini 库的依赖&am…...
批量处理多个模型的预测任务
#!/bin/bash# 检查是否传入必要的参数,若未传入参数则打印用法并退出 if [ "$#" -lt 1 ]; thenecho "用法: $0 <file_path>"echo "示例: $0 /home/aistudio/work/PaddleSeg/city/cityscapes_urls_extracted.txt"exit 1 fi# 读取…...
Java 编程初体验
Java学习资料 Java学习资料 Java学习资料 一、引言 在当今数字化的时代,编程已然成为一项极具价值的技能。而 Java 作为一门广泛应用于企业级开发、移动应用、大数据等众多领域的编程语言,吸引着无数初学者投身其中。当我们初次踏入 Java 编程的世界&…...
element-plus 的table section如何实现单选
如果是单选那么全新的按钮应该隐藏或者不可编辑的状态。但是我没找到改变成不可编辑的方法,只能采取隐藏 <template><!-- 注意要包一层div根元素,否则css样式可能会不生效,原因不详 --><div><el-table ref"proTab…...
【JavaEE进阶】图书管理系统 - 壹
目录 🌲序言 🌴前端代码的引入 🎋约定前后端交互接口 🚩接口定义 🍃后端服务器代码实现 🚩登录接口 🚩图书列表接口 🎄前端代码实现 🚩登录页面 🚩…...
牛客周赛 Round 77 题解
文章目录 A-时间表B-数独数组D-隐匿社交网络E-1or0 A-时间表 签到题 #include <bits/stdc.h> using namespace std;int main() {int a[6] {20250121,20250123,20250126,20250206,20250208,20250211};int n; cin >> n;cout << a[n - 1];return 0; }B-数独数…...
Mybatis配置文件详解
MyBatis通过XML或注解的方式将Java对象与数据库中的记录进行映射,极大地简化了数据访问层的开发。而在MyBatis的核心组成部分中,配置文件扮演着举足轻重的角色。它不仅定义了MyBatis的运行环境,还配置了数据源、事务管理、映射器等关键元素&a…...
《深度揭秘:TPU张量计算架构如何重塑深度学习运算》
在深度学习领域,计算性能始终是推动技术发展的关键因素。从传统CPU到GPU,再到如今大放异彩的TPU(张量处理单元),每一次硬件架构的革新都为深度学习带来了质的飞跃。今天,就让我们深入探讨TPU的张量计算架构…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
