【机器学习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.0
    for 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 += similarity
        ratSimTotal += similarity * userRating
    if simTotal == 0: return 0
    else: return ratSimTotal/simTotal

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

def svdEst(dataMat, user, simMeas, item):
    n = shape(dataMat)[1]
    simTotal = 0.0; ratSimTotal = 0.0
    U,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: continue
        similarity = simMeas(xformedItems[item,:].T,                             xformedItems[j,:].T)
        print(‘the %d and %d similarity is: %f‘ % (item, j, similarity))
        simTotal += similarity
        ratSimTotal += similarity * userRating
    if simTotal == 0: return 0
    else: 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实现算法实验。



本文作者:伊逍

原文链接

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

原文地址:https://www.cnblogs.com/zhaowei121/p/10600979.html

时间: 2024-08-15 00:36:19

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

【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像

前言 深度学习作为人工智能的重要手段,迎来了爆发,在NLP.CV.物联网.无人机等多个领域都发挥了非常重要的作用.最近几年,各种深度学习算法层出不穷, Generative Adverarial Network(GAN)自2014年提出以来,引起广泛关注,身为深度学习三巨头之一的Yan Lecun对GAN的评价颇高,认为GAN是近年来在深度学习上最大的突破,是近十年来机器学习上最有意思的工作.围绕GAN的论文数量也迅速增多,各种版本的GAN出现,主要在CV领域带来了一些贡献,如下图所示. 我们可

[阿里云-机器学习PAI快速入门与业务实战 ]课时1-机器学习背景知识以及业务架构介绍

什么是机器学习? 机器学习指的是机器通过统计学算法,对大量的历史数据进行学习从而生成经验模型,利用经验模型指导业务. 目前机器学习主要在一下一些方面发挥作用: 营销类场景:商品推荐.用户群体画像.广告精准投放 金融类场景:贷款发放预测.金融风险控制.股票走势预测.黄金价格预测 SNS关系挖掘:微博粉丝领袖分析.社交关系链分析 文本类场景:新闻分类.关键词提起.文章摘要.文本内容分析 非结构化数据处理场景:图片分类.图片文本内容提取OCR 其它各类预测场景:降雨预测.足球比赛结果预测 当然,机器学

基于Python数据分析与机器学习案例实战教程

课程--基于Python数据分析与机器学习案例实战教程 分享网盘下载--https://pan.baidu.com/s/1jHSaRAY 密码: xk37 课程背景基于数据分析与机器学习领域,使用python作为课程的实战语言,随着大数据与人工智能领域日益火爆,数据分析和机器学习建模成了当下最热门的技术,课程旨在帮助同学们快速掌握python数据分析包以及经典机器学习算法并通过对真实数据集分析进行实战演示. 课程风格通俗易懂,基于真实数据集案例实战. 主体课程分成三个大模块 (1)python数

CX10基于Python玩转人工智能最火框架 TensorFlow应用实践

新年伊始,学习要趁早,点滴记录,学习就是进步! 不要到处找了,抓紧提升自己. 对于学习有困难不知道如何提升自己可以加扣:1225462853 获取资料. CX103基于Python玩转人工智能最火框架 TensorFlow应用实践 下载地址:https://pan.baidu.com/s/1kWqLbcb 基于Python玩转人工智能最火框架 TensorFlow应用实践 全民人工智能时代,不甘心只做一个旁观者,那就现在开始,从人工智能最流行的框架TensorFlow学起,本课程将手把手带你掌握

分享《TensorFlow机器学习项目实战》中文PDF+英文PDF+源代码

下载:https://pan.baidu.com/s/1U3OiYNhS9ncvzpHGMoZfjA 更多资料分享:http://blog.51cto.com/3215120 <TensorFlow机器学习项目实战>中文PDF+英文PDF+源代码中文PDF,331页,带书签目录,文字可以复制,彩色配图.英文PDF,367页,带书签目录,文字可以复制,彩色配图.中英文两版对比学习.配套源代码. 作者: [阿根廷]Rodolfo Bonnin 译者: 姚鹏鹏 本书主要介绍如何使用TensorFlo

机器学习PAI全新功效——实时新闻热点Online Learning实践

(机器学习PAI Online Learning模块上线邀测,目前只支持华北2(北京)区域使用,本实验会用到流式机器学习算法)PAI地址:https://data.aliyun.com/product/learn邀测申请地址:https://data.aliyun.com/paionlinelearning 打开新闻客户端,往往会收到热点新闻推送相关的内容.新闻客户端作为一个承载新闻的平台,实时会产生大量的 新闻,如何快速挖掘出哪些新产生的新闻会成为成为热点新闻,决定着整个平台的新闻推荐质量.

云计算、机器学习、深度学习、人工智能和大数据,主要有什么关系?

业外人士如何了解云计算.机器学习.深度学习.人工智能.和大数据之间有什么内在联系?从应用的角度来阐述一下这五个概念之间的联系. 这五个概念按照领域可以划分成两个大部分,先分别介绍这些概念的内部联系,然后再综合介绍他们整体之间的联系. 云计算和大数据 云计算和大数据的很多研究内容是重叠的,比如分布式存储.分布式计算,可以说大数据是云计算发展到一定阶段的产物.云计算和大数据之间主要的区别在于关注的"点"不同,云计算强调服务(IaaS.PaaS.SaaS),而大数据则强调数据的价值(数据采集

Python机器学习及实战kaggle从零到竞赛pdf电子版下载

Python机器学习及实战kaggle从零到竞赛pdf电子版下载 本书面向对机器学习感兴趣的专业认识,帮助从零开始一步一步掌握机器学习的奥义,在阅读的过程中由浅入深,慢慢步入机器学习的殿堂,零基础也可学习哦! 链接:https://pan.baidu.com/s/1l7MBESegEWD4fm0fYyld5w 提取码:eu2m 目录 第1章 简介篇…1 1.1 机器学习综述…1 1.1.1 任务…3 1.1.2 经验…5 1.1.3 性能…5 1.2 Python编程库…8 1.2.1 为什么使

机器学习资料与攻略超强整理吐血推荐(二)

在前文<机器学习资料与攻略超强整理吐血推荐(一)>中,我们讲到要进入人工智能的圈子,数学是不可逾越的第一关,然后我们又推荐了一些你必须掌握的数学方面的资料.接下来,在这一篇中,我们将介绍关于机器学习的理论与工具方面的资料. 二.工具篇 工欲善其事,必先利其器.大数据时代,人工智能的工具趋势是显而易见且确定无疑的.作为一名数据科学家,其实你可以选择的工具非常多,其实随着时代的发展和技术的演进,传统的SPSS.STATA和SAS等这些老牌数据分析工具都已经集成了机器学习和数据挖掘的模块.当然,这不