APP下载

基于改进协同过滤算法的个性化美食推荐APP开发

2019-06-10周显春邓雨吴世雄杨宇鑫王晗

软件导刊 2019年2期
关键词:特征融合

周显春 邓雨 吴世雄 杨宇鑫 王晗

摘 要:为了改善基于个人喜好或营养成分等单一特征的传统协同过滤算法推荐效果不好、缺乏实时性及使用不方便等问题,将中医体质、地方口味、营养成分等多种特征相结合,利用基于Spark Streaming的协同过滤算法,设计一款基于 Android 平台的智能饮食推荐APP。实验结果表明,改进协同过滤算法能够大幅改善推荐效果,该APP不仅可为用户推荐符合身体健康需要,且合乎口味的饮食,而且能够较好地满足用户对实时性与便捷性的要求。

关键词:协同过滤算法;Spark Streaming;特征融合;智能推荐;饮食推荐

DOI:10. 11907/rjdk. 182698

中图分类号:TP319文献标识码:A文章编号:1672-7800(2019)002-0088-03

Abstract:In order to improve the recommendation effect of traditional collaborative filtering algorithms based on individual preferences or nutritional components, lack of real-time performance and inconvenience in use, a collaborative filtering algorithm based on SparkStreaming platform is used to realize online real-time recommendation according to the characteristics of traditional diet, traditional Chinese medicine constitution and nutritional components. On this basis, a smart diet recommendation APP based on Android platform is designed. Practice has proved that the improved algorithm based on Android can greatly improve the recommendation efficiency and provide convenience. This APP can not only recommend a healthy and tasty diet for users, but also meet the real-time and convenient requirements of users.

Key Words:collaborative filtering algorithm;Spark Streaming;feature fusion;Intelligent recommendation;food recommendation

0 引言

近年来,随着生活节奏的加快、生活压力的增大,生活中形成的一些不良陋习使很多人身体处于亚健康状态,尤其是不科学的饮食结构,严重威胁着人们身体健康。因此,合理、科学且能充分满足身体营养需求的美食开始引起人们重视[1-2]。然而,能够根据每人的个性化身体特征搭配食物的营养师或专家不仅数量有限,而且收费高、效率低。随着人工智能、大数据及互联网技术的发展,基于智能算法的美食推荐系统逐渐受到人们欢迎[3]。

国内外学者对饮食推荐进行了大量研究。Zhang等[4]利用信息技术与数学回归分析方法建立各种营养输入、输出反馈的非线性模型,研究不同营养成分对人体身体组织的影响;寇文心[5]根据营养成分及个人身体体质情况,采用加权随机抽样算法与多元线性回归模型设计营养配餐系统,并且建立反馈机制对配餐结构进行修正,使之更加科学;唐南沙[6-7]推出一款基于Android的智能点餐APP,能夠智能推荐多种品种的餐饮;邢磊[8]利用范例推理算法与基于Hadoop 分布式平台的用户协同过滤方法,通过Android平台为糖尿病患者自动推荐饮食。然而,目前对于可将中医体质、营养成分等特征相结合的智能饮食推荐方法的研究仍然较少。

针对上述问题,本文设计一款基于Android 平台的智能饮食推荐APP,可根据中医体质、地方口味、营养成分等多种特征,推荐满足用户健康需求,且合乎其口味的饮食。

1 协同过滤算法改进

协同过滤算法自提出以来,在个性化推荐领域得到了广泛应用。其首先计算用户间知识水平与兴趣等偏好的相似性,然后为相似用户自动推荐相似信息[9]。协同过滤主要分为基于用户与基于物品两种类型[10]。协同过滤算法面临的两个最大问题是如何解决评分稀疏性及算法扩展性问题[11]。在海量数据和集中式数据处理环境下,相关问题尤其突出。针对上述问题,研究人员分别提出基于SVD[12-13]与Spark平台[11,14-15]的协同过滤改进算法。

Spark Streaming是构建在Spark平台上的一种流式实时计算框架,其编程方式和接口与Spark类似,但处理速度比Spark平台快,可以达到亚秒级,能够提高推荐实时性。为了更好地满足协同过滤算法实时性、可扩展性,以及个性化推荐的需要,本文研究基于Spark Streaming平台的协同过滤方案,并利用MovieLens 公开数据集对方案推荐的准确性及时效性进行验证。

1.1 基于Spark Streaming平台的协同过滤算法实现

基于用户的协同过滤(User-Based Collaborative Filtering,简称为User-Based CF),其伪代码分为4个步骤:数据处理、相似用户查找、实时推荐、结果显示。

(1)__init__(self) ;初始化基本参数和变量

(2)SparkContext()  //读取物品相似矩阵

(3)StreamingContex()  //初始化Streaming對象

(4)fileStream(). map(). checkpoint()  //设置监听目录

(5)reduceByKeyAndWindow(). reduceByKey()  //采用流式窗口技术处理数据

(6)map(),reduceByKey(),groupByKey(),flatMap()  //计算矩阵,完成实时推荐

(7)saveAsTextFiles ()  //保存结果

1.2 实验与结果分析

1.2.1 实验平台搭建

实验平台:在虚拟机上安装ubuntu server 17.10,以及Java 8、Hadoop 2.7、Spark2.3.2,搭建Spark计算集群平台,具体配置如表1所示[16]。

实验数据:采用 UCI 公开MovieLens数据集分别进行4组实验,100K、1M、10M和100MB各自对应10 万条、100 万条、1000 万条、1 亿条数据。评分分为1~5等级,数值越大表示使用者对该物品评价越高。

1.2.2 评分预测准确性测试

均方根误差(RMSE)、平均绝对误差(MAE)是衡量推荐系统推荐准确度最常用的指标,两者值越小表示推荐效果越好。

由表2数据可知,相比于传统协同过滤算法,基于Spark Streaming协同过滤算法的MAE、 RMSE值较小,说明Spark分布架构能够推高推荐精度。

1.2.3 算法执行时间测试比较

传统协同过滤算法、基于Spark的协同过滤算法与基于Spark Steaming的协同过滤算法分别针对不同数据集进行对比实验,结果如图1所示。

由图1数据可知,随着处理数据量的增加,基于Spark Streaming平台协同过滤算法的时间效率优势越来越明显,为实时精准推荐提供了可能。

2 基于改进协同过滤算法的美食推荐APP开发

2.1 关键技术

(1)APP Inventor。APP Inventor为APP Inventor Google Lab的一个子计划,是一款面向非专业人员的Android开发程序工具,让使用者开发程序类似玩乐高积木一样简单、有趣。

(2)Scrapy爬虫架构。Scrapy是一款基于Python、能够高速从Web抓取结构化数据的框架,其最大优点是可根据现实场景要求对其基类进行灵活修改,使其更好地满足用户需要。

(3)Redis 数据库。为提高数据爬取、存取速度,该APP采用分布式Redis数据库,能够实现高速异步存取,并提高推荐实时性。该数据库内保存了用户体质、菜谱、地域口味等信息。

2.2 系统设计

2.2.1 系统需求分析

用户需求:每天根据不同用户体质及地方口味,结合营养价值推荐不仅满足用户健康需求,且合乎其口味的饮食。

2.2.2 系统整体架构

本系统架构如图2所示,共分为3个环节:首先从Android客户端通过Http协议获取用户体质、口味等相关信息,通过Json反馈给Android客户端;其次,利用Scrapy爬虫框架进行网络相关食谱的信息获取;最后,采用基于Spark Streaming平台的协同过滤算法完成食谱与不同体质、口味的相关性分析并进行推荐。

2.2.3 Android端系统功能设计

客户端界面主要完成用户登录、用户注册、菜谱推荐、用户信息管理等相关功能的可视化设计[17-18],具体功能设计如图3所示。

3 系统实现

(1)首页。双击APP,启动程序即可进入首页。该页面有上一次推荐的菜谱图片及名称,以及美食推荐、美食搜索、个人中心与菜单设置板块,效果如图4所示。

(2)推荐菜单页。推荐算法根据用户个人体质与口味基本信息推荐适合该用户的菜单,具体内容包括口味、食效、适合人群,如果用户感兴趣还可通过菜单进入详情页,效果如图5所示。

(3)菜单详情页。该页面内容包括特征、主料、调料及详细推荐做法,效果如图6所示。

(4)中医体质检测页。根据中医体质检测题目推测用户体质类型[19-20] ,题目选项分为:没有、很少、有时、经常、总分,对应分值比重分别为1~5,效果如图7所示。

4 结语

本文利用基于Spark Streaming平台的协同过滤算法设计一款智能饮食推荐APP,可根据中医体质、地方口味、营养成分等多种特征,实时推荐满足用户身体健康需求,且合乎其口味的饮食。然而,对各种特征的识别与提取需要花费大量成本,因此与人工智能技术相结合进行智能提取将是未来的研究方向。

参考文献:

[1] 张秉辉,闫凤云,张玉芝. 关于青少年饮食行为与健康的思考[J]. 中国药物经济学, 2014(12):71-72.

[2] 彭亚红.  中小学生营养知识及饮食健康行为的调查与分析[J].  中国卫生标准管理, 2015(19):6-7.

[3] SCHAFER J B, KONSTAN J A, RIEDL J. E-Commerce recommendation applications[J]. Data Mining & Knowledge Discovery, 2001, 5:115-153.

[4] ZHANG Z,VEDENOV D,WETZSTEIN M. Can the U.S. ethanol industry compete in the alternative fuels market[J]. Agricultural Economics,2007,37(1):105-112.

[5] 寇文心. 智能营养配餐系统及其核心算法的研究[D]. 北京:北京工业大学,2015.

[6] 陈雪丽. 基于Android的无线点餐系统的设计与实现[D]. 西安:西安电子科技大学, 2015.

[7] 唐南沙. 基于Android的智能点餐系统[D]. 长沙:湖南大学,2017.

[8] 邢磊. 基于改进协同过滤的糖尿病饮食推荐系统[D]. 兰州: 兰州大学,2016.

[9] 黄晓斌. 网络信息过滤原理与应用[M]. 北京:北京图书馆出版社,2005.

[10] DESHPANDE M,KARYPIS G. Item-based top-N recommendation algorithms[J]. ACM Transactions on Information Systems,2004,22(1):143-177.

[11] 王源龍,孙卫真,向勇. 基于Spark的混合协同过滤算法改进与实现[J/OL]. 计算机应用研究,2019(3):1-2[2018-12-30]. http://kns.cnki.net/kcms/detail/51.1196.TP.20180209.1115.058.html.

[12] 方耀宁,郭云飞,丁雪涛,等. 一种基于局部结构的改进奇异值分解推荐算法[J]. 电子与信息学报, 2013, 35(6):1284-1289.

[13] 刘雯. 基于奇异值分解和K-means聚类的电子商务推荐算法研究[D]. 武汉:华中师范大学,2015.

[14] 于娜娜,王中杰. 基于Spark的协同过滤算法的研究[J]. 系统仿真技术,2016,12(1):40-45.

[15] 许智宏,蒋新宇,董永峰,等. 一种基于Spark的改进协同过滤算法研究[J]. 计算机应用与软件, 2017(5):247-254.

[16] 周显春,肖衡. Spark框架下聚类模型在网络流量异常检测中的应用[J]. 网络安全技术与应用, 2017(5):62-63.

[17] 李勇. 指尖上的美味——手机里不可或缺的美食APP推荐[J].  电脑知识与技术:经验技巧,2017(5):5-15.

[18] 徐怡雯,鲍懿喜. 基于用户社交特征的美食类APP用户体验设计研究[J]. 设计, 2017(1):20-21.

[19] 梁永林,高彩霞,张云展,等. 应用中医体质量表对大学生三种体质相关性的研究[C]. 国际体质医学论坛暨中华中医药学会中医体质分会全国中医体质学术年会,2013.

[20] 漆亚学,梁永林,高彩霞,等. 应用中医体质量表对大学生兼夹体质情况的研究[J]. 甘肃中医学院学报,2013,30(2):92-95.

(责任编辑:黄 健)

猜你喜欢

特征融合
基于稀疏表示与特征融合的人脸识别方法
一种“客观度量”和“深度学习”共同驱动的立体匹配方法
语谱图傅里叶变换的二字汉语词汇语音识别
基于移动端的树木叶片识别方法的研究
融合整体与局部特征的车辆型号识别方法