【机器学习PAI实战】—— 玩转人工智能之美食推荐

前言

在生活中,我们经常给朋友推荐一些自己喜欢的东西,也时常接受别人的推荐。怎么能保证推荐的电影或者美食就是朋友喜欢的呢?一般来说,你们两个人经常对同一个电影或者美食感兴趣,那么你喜欢的东西就很大程度上朋友也会比较感兴趣。在大数据的背景下,算法会帮我寻找兴趣相似的那些人,并关注他们喜欢的东西,以此来给我们推荐可能喜欢的事物。

场景描述

某外卖店铺收集了一些用户对本店铺美食的评价和推荐分,并计划为一些新老客户推荐他们未曾尝试的美食。

数据分析

A  B  C  D  E  F  G  H  I  J  K
0[0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5],1[0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 3],2[0, 0, 0, 0, 4, 0, 0, 1, 0, 4, 0],3[5, 4, 5, 0, 0, 0, 0, 5, 5, 0, 0],4[0, 0, 0, 0, 5, 0, 1, 0, 0, 5, 0],5[4, 3, 4, 0, 0, 0, 0, 5, 5, 0, 1],6[0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4],7[0, 0, 0, 2, 0, 2, 5, 0, 0, 1, 2],8[0, 0, 0, 0, 5, 0, 0, 0, 0, 4, 0],9[1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0]

横轴为美食品种,分为A--K 11中,竖轴为用户序号,有0-9 10个人。表内值为某个用户对某种美食的推荐分,0表示其未曾吃过,5分为最高的推荐分。以上数据为实验虚构数据。

场景抽象化

给定一个用户i,我们根据上面的数据为其推荐N个推荐分最高的美食。

模型选择

协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。

我们也将采用协同过滤来实现商品推荐,并在下面的章节一步步实现基于协同过滤的商品推荐系统。

数据处理

以上数据,不存在缺失和无意义推荐分,即不超出范围,格式正确。

搭建环境

  • 首先进入noteBook建模,链接

  • 然后创建新实例

  • 之后打开实例

现在基础环境以及搞定了,我们可以用terminal安装自己需要的包环境。同时可以选择python2或者python3的开发环境。而且左侧的文件系统,支持本地文件的上传下载等。

相似度计算

在推荐系统中,我们需要计算两个人或商品的相似度,我们可以采用余弦相似度,皮尔逊相关系数等。

余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,表示完全一样,而其他任何角度的余弦值都不大于1;并且其最小值是-1,相似度为0。

皮尔逊相关系数( Pearson correlation coefficient),是用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。

新建文件recom.py,实现相似度计算函数

def cosSim(inA,inB):num = float(inA.T*inB)denom = la.norm(inA)*la.norm(inB)return 0.5+0.5*(num/denom)

推荐分计算

在文件recom.py,实现推荐分计算

#dataMat 用户与美食的矩阵
#user 用户序号
#simMeas 相似度算法
#item 美食商品def standEst(dataMat, user, simMeas, item):n = shape(dataMat)[1]#商品数simTotal = 0.0; ratSimTotal = 0.0for j in range(n):#所有商品,遍历userRating = dataMat[user,j]#user对该商品的推荐分if userRating == 0: continue#如果user 未推荐该商品则过滤#logical_and逻辑与,nonzero非零判断,overLap为均为商品item,j推荐的用户overLap = nonzero(logical_and(dataMat[:,item].A>0, \dataMat[:,j].A>0))[0]if len(overLap) == 0: similarity = 0#以此overLap,计算两商品的相似度。else: similarity = simMeas(dataMat[overLap,item], \dataMat[overLap,j])print('the %d and %d similarity is: %f' % (item, j, similarity))simTotal += similarityratSimTotal += similarity * userRatingif simTotal == 0: return 0else: return ratSimTotal/simTotal

对于特征向量非常稀疏,或者特征之间关联关系明显,协方差较大则需要对原有维度的特征进行降维。这样既可以节省资源加快运算,也可以避免冗余特征带来的干扰。

def svdEst(dataMat, user, simMeas, item):n = shape(dataMat)[1]simTotal = 0.0; ratSimTotal = 0.0U,Sigma,VT = la.svd(dataMat) #奇异值分解Sig4 = mat(eye(4)*Sigma[:4]) #构建对角矩阵xformedItems = dataMat.T * U[:,:4] * Sig4.I  #数据维度转换for j in range(n):userRating = dataMat[user,j]if userRating == 0 or j==item: continuesimilarity = simMeas(xformedItems[item,:].T,\xformedItems[j,:].T)print('the %d and %d similarity is: %f' % (item, j, similarity))simTotal += similarityratSimTotal += similarity * userRatingif simTotal == 0: return 0else: return ratSimTotal/simTotal

通过计算待推荐商品与已推荐商品的相似度,并乘以该用户对已推荐商品的推荐分,来计算待推荐商品的推荐分。

在文件recom.py,加入recommend函数

#dataMat 用户与美食的矩阵
#user 用户序号
#N 推荐前N个商品
#simMeas 相似度计算算法
#estMethod 推荐分计算算法def recommend(dataMat, user, N=3, simMeas=cosSim, estMethod=standEst):#找出user未评分的商品unratedItems = nonzero(dataMat[user,:].A==0)[1]#find unrated items if len(unratedItems) == 0: return 'you rated everything'itemScores = []#依次计算这些商品的推荐分for item in unratedItems:estimatedScore = estMethod(dataMat, user, simMeas, item)itemScores.append((item, estimatedScore))#返回前N个较好分的结果return sorted(itemScores, key=lambda jj: jj[1], reverse=True)[:N]

算法演示

如果是本地编辑的文件,可以通过文件上传方式上传到服务器。

  • 新建noteBook演示

  • 加载算法模板

  • 数据展示

  • 为序号为2的用户推荐商品

总结

通常在计算相似度之前,我们需要确定是计算基于商品的相似度(上面的方式),还是计算基于用户的相似度。在现实情况下,我们要根据用户和商品的数据决定选择哪种计算方式。同时,在数据量变大时,我们通常需要先降维,在做商品推荐。部分代码参考《机器学习实战》,本篇文章主要介绍如何使用PAI-DSW实现算法实验。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小网站的容器化(上)

戳蓝字“CSDN云计算”关注我们哦!作者 | 王洪鹏出品 | CSDN云计算(ID:CSDNcloud)作为一枚程序员,大家几乎基本都有自己的个人网站,这些网站有的可能是自己开发的有的可能是用一些工具自动生成的&#xff0c…

Java 8中处理集合的优雅姿势——Stream

在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增、删、改、查、聚合、统计、过滤等操作。相比之下,关系型数据库中也同样有这些操作,但是在Java 8之前,集合和数组的处理并不是很便捷。 不过&#…

用Python扒出B站那些“惊为天人”的阿婆主!

戳蓝字“CSDN云计算”关注我们哦!作者 | 徐麟责编 | 阿秃前言近期B站的跨年晚会因其独特的创意席卷各大视频网站,给公司带来了极大的正面影响,股价也同时大涨,想必大家都在后悔没有早点买B站的股票:然而今天我们要讨论…

我们总结了每个技术团队都会遇到的 4 个难题

阿里巴巴 2019 年实习生校园招聘已经启动,为此,我们整理了一篇《每个技术团队都会遇到的4个难题》,帮助即将从校园进入公司实习的后端程序员,以实践的视角,看看一个后端技术团队会遇到的一些难题。虽然,技术…

怎么查看指定app日志_Linux系统查看系统信息和日志有哪些常用的命令

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言本文主要讲解Linux系统有哪些日志文件以及如果查看和分析这些日志文件。查看linux日志的方法2. Linux日志文件有哪些我们来看看L…

Git 切换提交历史节点

文章目录1. 命令版本2. idea图形化版本(推荐使用)1. 命令版本 git checkout 版本号注:适用于之前和之后 2. idea图形化版本(推荐使用) 未操作截图: 切换到第3次提交 切换到第2次提交 切换到第5次提交

阿里云RPA(机器人流程自动化)干货系列之三:阿里云RPA介绍

本文是阿里云RPA(机器人流程自动化)干货系列之三,详细介绍了阿里云RPA的产生背景、技术特点、功能特性、非功能指标以及发展现状等。 一、产生背景 在2011年,随着阿里巴巴集团的各项业务突飞猛进,集团内的各个部门都遇…

入局视频会议市场 揭秘“腾讯会议”背后的创新黑科技

戳蓝字“CSDN云计算”关注我们哦!作者 | 刘丹出品 | CSDN云计算(ID:CSDNcloud)曾经的你是否遇到过这样的窘境?出门在外巧遇紧急会议,手机接入模糊不清,挠头状……企业内部分支偏远,开…

阿里巴巴基于 Nacos 实现环境隔离的实践

随着Nacos 0.9版本的发布,Nacos 离正式生产版本(GA)又近了一步,其实已经有不少企业已经上了生产,例如虎牙直播。 本周三(今天),晚上 19:00~21:00 将会在 Nacos 钉钉群直播 Nacos 1.…

Git 版本对比 idea图形化版本

默认初始化5次提交 对比第4次提交和第5次提交的不同点&#xff1a; 依次双击文件即可&#xff0c;不同部分会标识出来&#xff0c;如下图所示&#xff1a; 这个图的意思是&#xff0c;第5次提交在第4次提交的基础上添加了一条<li>v5</li> 其他版本之间的对比…

点读笔客户端_新手妈妈如何选购点读笔

点读笔的起源现在的中国早教市场来说&#xff0c;点读笔受到很多家长的青睐。其实早在很久以前&#xff0c;点读笔已经风靡美国和欧洲。当时在美国&#xff0c;该产品称为电子书&#xff0c;原理是通过电子设备感应读出书中相应的内容。主要是给婴幼儿学习语言和锻炼阅读能力的…

在 Ali Kubernetes 系统中,我们这样实践混沌工程

在传统的软件测试中&#xff0c;我们通常通过一个给定的条件来判断系统的反馈&#xff0c;通过断言来判断是否符合预期&#xff0c;测试条件和结果通常比较明确和固定。而混沌工程&#xff0c;是通过注入一些“不确定”因素&#xff0c;象放进了一群淘气的猴子&#xff0c;在系…

解决idea一直updating index

是因为使用了电脑清理软件&#xff0c;可走以下流程解决问题&#xff0c; 点击【File 】-> 选择【invalidate Caches/Restart】 -> 点击【invalidate and Restart】&#xff0c;完美解决问题。

经过卖房创业与“云吞面”群聊,老季带着优刻得迎来了“开市大吉”……

CSDN记者晶少快报于上海证券交易所现场 今日&#xff0c;优刻得UCloud科技股份有限公司正式在科创板挂牌上市&#xff0c;股票简称优刻得&#xff0c;股票代码为688158。作为唯一一家没有“爸爸”的云计算服务商&#xff0c;2012年成立的优刻得UCloud&#xff0c;自创立近8年来…

天气模式_北方降雪骤减!南方开启湿冷模式多阴雨!|天气展望

刚刚过去的周末许多小伙伴期盼的雪花如愿到货白雪飘飘的冬日浪漫你感受到了吗→“初雪”刷屏&#xff1f;今天&#xff0c;来聊聊关于雪的那些事~然而在北方雪花纷飞的同时象象看到后台许多南方的粉丝感叹这雪与我无关只能穿着半袖开着空调吃着雪糕来感受下雪的氛围这不冷空气决…

Git bash 编码格式配置_02

文章目录1. 中文配置2. 基础编码3. 配置环境变量1. 中文配置 2. 基础编码 在git bash命令窗口总依次执行 git config --global i18n.commitencoding utf-8 #这个主要就是log输出的编码格式 git config --global i18n.logoutputencoding utf-8 git config --global gui.encodi…

AbutionGraph:构建以知识图谱为核心的下一代数据中台

作者 | 图特摩斯科技创始人闭雨哲来源 | AI科技大本营&#xff08;ID:rgznai100&#xff09;前言图特摩斯科技&#xff08;Thutmose&#xff09;基于自研的图形数据库AbutionGraph&#xff08;实时多维数据存储与计算一体化的高可用平台&#xff09;为核心&#xff0c;构建AI智…

Git 克隆远程项目到本地_01

git clone 远程项目ssh地址栗子&#xff1a; git clone gitgithub.com:gb-heima/yyblog.git

保证一致性吗_RabbitMQ消息一致性:重要消息,请设置持久化

在应用开发中&#xff0c;持久化也是经常被提起的&#xff0c;持久化就是存在在内存当中的数据&#xff0c;要写入到磁盘中&#xff0c;这样在内存中的数据由于各种原因丢失掉后&#xff0c;可以通过磁盘重新加载到内存中来&#xff0c;对于消息中间件&#xff0c;持久化也至关…

大厂HR年底绷不住了:怎么招程序员这么难,尤其搞这项技术的!!

力与力之间的作用一定是相互的。当我们感觉找工作难的时候&#xff0c;其实企业和HR也在每天崩溃&#xff1a;“怎么招程序员这么难&#xff1f;”以Python程序员为例&#xff0c;很多大牛都能拿到10&#xff5e;20万的年薪&#xff0c;但是很多企业却根本招不到人&#xff0c;…