融合时间上下文的个性化营养饮食推荐研究*
2020-08-13王子岚
王子岚
(黄山职业技术学院 安徽黄山 245000)
随着生活水平的不断提高,人们餐桌上的食材日益丰盛.而由于缺乏专业的营养知识,因饮食结构不合理或不健康饮食导致的各类健康问题凸显.国家卫计委在2015年发布的《中国居民营养与慢性病状况报告》指出,中国国民饮食结构变化明显,超重和肥胖问题突出,高血压、糖尿病等各类慢性疾病人数逐年上升.面对海量的食材信息,如何选择既符合个人偏好又营养均衡的健康饮食成为人们共同追求的目标.随着推荐系统在电子商务等领域的成功应用,学者们开始关注饮食推荐。高岩等人[1]设计了一款糖尿病患者饮食营养管理平台,实现特定人群的饮食推荐.林泽聪等人[2]基于用户协同过滤提出了一种个性化食材推荐算法,实现基于用户偏好的食材推荐.方琦[3]提出了一种结合多目标优化算法和改进协同过滤算法的营养饮食推荐,旨在给用户提供同时符合营养需求和个人偏好的饮食推荐.喻兵等[4]提出一种集用户画像、饮食记录和情境的多维度特征的饮食健康推荐方法,旨在帮助人们合理饮食结构.
现有的饮食推荐在营养均衡方面主要是针对特殊人群的饮食推荐,没有考虑用户偏好.在电子商务领域主要是协同过滤、关联规则等传统推荐算法的应用,没有关注用户饮食偏好随上下文的动态变化.实际上用户偏好经常会受发生行为的上下文影响[5].例如,用户周末和朋友一起去聚餐,这里的上下文就包括时间、地点、同伴,而聚餐吃的食材和这些上下文有直接密切的关系.其中时间上下文是一种重要且容易收集的上下文信息,能够反映出用户的偏好变化以及周期性,一般只需要保留用户行为发生的时间戳即可获得.文章从居民健康饮食的实际需求出发,针对普通健康人群提出一种融合时间上下文的个性化营养饮食推荐方法,既考虑用户偏好随时间上下文的动态变化,实现符合用户动态偏好的食材列表推荐,又在此基础上利用非支配遗传算法NSGA-Ⅱ实现各营养素的多目标均衡优化,最终输出同时符合用户偏好和营养需求的动态推荐方案.
1问题建模
在个性化营养饮食推荐问题中,需要同时考虑用户的饮食偏好和推荐食材的营养均衡.用户的饮食偏好会随着时间变化而变化,相对来说用户近期的饮食记录更能反映现阶段用户的饮食偏好.文章从用户的历史饮食记录出发,一是考虑用户饮食偏好的动态性,引入时间效应函数拟合用户偏好随时间的衰减变化;同时考虑食材的季节周期性,构建食材季节敏感函数;并对两者进行加权得到融合时间上下文的评分权重模型.二是将得到融合时间上下文的评分权重模型赋予用户-食材评分得到新的用户-食材评分,在此基础上进行相似度改进和评分预测,从而得到融合时间上下文的个性化食材推荐列表.三是根据目标用户的身高、体重、工作等信息,依照《中国居民膳食营养素参考摄入量》(RNI)中的摄入参考值[6],使用非支配遗传算法NSGA-Ⅱ对推荐列表中的食材进行营养素多目标优化,最终形成符合用户偏好的个性化营养饮食推荐方案.构建的融合时间上下文的个性化营养饮食推荐模型如图1所示.
图1 融合时间上下文的个性化营养饮食推荐模型
2融合时间上下文的改进协同过滤算法
基于用户的协同过滤(User-based CF,UCF)旨在历史饮食记录中通过用户相似度计算找到与目标用户口味最相似的用户群,然后根据这类用户群的饮食偏好对目标用户进行食材推荐[7].传统的UCF假设用户的饮食偏好不会随时间变化而变化.而实际上用户的偏好是会随着时间上下文动态变化的.用户近期偏好的食材更能反映当前时间用户的饮食偏好.同时,用户的饮食偏好还会受到当前时间食材特殊的季节性周期影响.因此,文章通过引用时间效应函数拟合用户对食材的兴趣随时间衰减的变化,同时引入食材季节敏感函数,并通过加权的方法得到融合时间上下文的评分权重模型,然后在传统UCF基础上进行相似度计算和预测评分,最后形成推荐食材列表.
2.1用户-食材评分
用户一般不会直接对食材进行显性评分,但通常会在饮食中频繁选择其偏好的食材,因此假设用户对食材的饮食频次越多,就说明用户对食材的偏好值越高.文章对用户饮食记录进行频次统计:以一次饮食记录表示用户对这个食材的偏好值为1进行累加,得到用户-食材频次矩阵.
直接以饮食频次为单位并不能精确的反映用户对食材的偏好程度.例如两个用户对某一种食材的饮食频次为16次和18次,如果直接用16和18作为用户偏好的评分是不合适的.文章认为用户对某种食材的偏好和饮食频次是一种非线性的关系,用公式(1)将用户-食材频次转换成用户-食材评分:
(1)
其中:为用户-食材的偏好评分,为用户x对食材i的饮食频次,a、b为调节系数.这里设置a=5,b=5,将的取值范围映射到0-5之间.
2.2融合上下文的时间评分权重模型
用户的饮食兴趣会随着时间变化而变化,而最近的饮食记录通常会更能体现用户现在的饮食偏好.文章选用文献[8]实验结果,加大近期时间的行为权重,通过指数函数拟合艾宾浩斯遗忘曲线[9]作为时间效应函数,表示用户对食材的偏好随时间的衰减变化,其公式如下:
(2)
其ti=|tnow-thot|表示用户当前时间与其最后食用食材i的时间差,单位是天.
食材还存在特殊的季节周期性[10],营养师也推荐选择时令食材,这和中国人的饮食习惯是一致的.例如在夏季,用户会更多的选择绿豆汤。因此在饮食推荐时,食材的周期性也一定程度上影响用户的偏好,构建食材季节敏感函数如下:
(3)
其中,kis(s=1,2,3,4)表示食材j对季节s是否敏感,若敏感,则Kis=1,若不敏感,则kis=0.S表示四季划分,其中s=1为春季(2-4月),记为; s=2为夏季(5-7月),记为; s=3为秋季(8-10月);s=4为冬季(11-1月).
同时考虑用户兴趣随时间衰减和食材季节性周期两种时间因素,将公式(2)与公式(3)通过加权的方式得到融入时间上下文的评分权重模型如下:
Wi=α×f(ti)+(1-α)×season(i,s)
(4)
其中,Wi为融入时间上下文的用户-食材评分权重;a为权重因子.
2.3改进用户相似度计算
UCF的主要思想是根据用户-食材评分选择相似度公式进行计算,进而得到目标用户的近邻用户合集.以用户之间夹角的余弦作为相似度度量的为余弦计算法,该方法没有考虑不同用户的评价尺度差异.修正的余弦计算方法在计算前对用户评分进行了归一化来避免此类问题.Person相关系数是通过计算用户之间的相关系数来计算其相关性.与修正的余弦计算法不同的是其只基于共同评分项目进行计算.文章选用Person相关系数进行相似度改进计算,首先将融入上下文的时间评分权重Wi赋予用户-食材评分Rxi得到新的用户-食材评分:
Rx,i'=Rxi×Wi
(5)
得到新的相似度计算公式如下:
(6)
2.4预测评分
通过改进后的公式(6)进行用户相似度计算,并通过改进后的预测评分公式(7),预测目标用户x对食材i的评分:
(7)
式(7)中,K为利用式(6)计算得到的目标用户x的近邻合集,Ry,i'表示融入时间上下文的近邻用户y对食材i的评分,sim(x,y)是用户x和近邻用户y的相似度.
在利用式(7)得到预测评分之后,取预测评分的TOPN得到融合时间上下文的个性化食材推荐列表.
2.5算法描述
算法:融合时间上下文的改进协同过滤算法.
输入:用户-食材频次矩阵、推荐个数N、目标用户x.
输出:融合时间上下文的个性化食材推荐列表.
Step1:将用户-食材频次矩阵转换为用户-食材评分矩阵.
Step2:将时间效应函数f(ti )和食材季节敏感函数season(i,s)加权得到融合时间上下文的用户-食材评分权重模型.
Step3:将时间上下文的用户-食材评分权重赋予用户-食材评分矩阵得到新的用户-食材评分Rx,i'.
Step4:根据改进的用户相似度计算得到目标用户x的近邻合集K.
Step5:预测目标用户x对未评分食材i的预测评分Px,i.
Step6:对评分进行排序并得到融合时间上下文的个性化食材推荐列表.
3多目标优化算法均衡营养需求
营养需求均衡是指将推荐食材按照人每日所需要的能量及每种营养素的摄入值进行食材的量化,属于多目标优化问题.多目标优化的本质上是求得Pareto解集,一般由目标函数和约束条件组成.文章基于食材营养素均衡,定义多目标优化模型如下:
目标函数:
min|fi(Y)|= |∑x(m∈Vxmi×ym-si|
(8)
Y=(x1,x2,…,x_m,…,y1,y2, …,ym,…)
(9)
根据营养素摄入量对应标准值正负10%以内为正常摄入范围[11],设置以下约束条件:
minym≤ym≤maxym
(10)
其中,V(x1,x2,…,xm)表示食材集合,Y为给用户推荐的食材xm与其对应的推荐用量组成的目标函数.xmi表示食材xm营养素i的值,si是根据RNI[6]得到的用户每日所需的第i种营养素的DRIs标准值.
多目标粒子群算法(multi-objective particle swarm optimization,MOPSP)[12]和非支配遗传算法(non-dominated sorting genetic algorithm,NSGA-Ⅱ)[13]是饮食推荐中应用广泛的多目标优化算法.文章采用 NSGA-Ⅱ算法对目标用户的食材推荐列表中的m种食材进一步优化,以能量、蛋白质、钙等主要营养素含量与标准值之差作为目标函数,从而生成同时符合用户偏好和满足营养素需求的个性化营养饮食方案给用户.非支配遗传算法NSGA-Ⅱ算法描述如下:
Step1:初始化种群.
Step2:执行快速非支配排序和选择、交叉和变异三个基本操作直至生成第一代子群,进化代数Gen=2.
Step3:合并父、子代,执行快速支配排序和拥挤度计算,选择适合进入下一代的个体,生成新的父代种群.
Step4:执行选择、交叉和变异,如没有达到最大进化代数maxGen,则进化代数Gen=Gen+1,重复执行Step3.直至达到最大进化代数maxGen时输出配置方案并结束.
4实验
4.1 数据集
选择 H学院部分在校学生作为用户对象,基于校园一卡通和问卷结合的方式统计在校学生2017年-2019年的部分饮食记录数据,共有273名学生的1万多条饮食记录。将数据集按记录的时间戳排序后4:1分为训练集和测试集.
4.2评价指标
文章提出的融合时间上下文的改进协同过滤算法UCFT+的效果评价,采用离线实验的方式进行.文章选用分类准确率中的准确率precision作为该实验的评价指标[14],precision越高,说明算法推荐预测的食材与用户实际饮食记录越接近,推荐的准确率越高.precision计算公式如下:
(11)
其中是用户u在测试集上偏好的食材合集,是推荐算法推荐给用户u的食材.
4.3实验结果及分析
将文章提出的融合时间上下文的改进协同过滤算法UCFT+,计算得到目标用户的融合时间上下文的个性化食材推荐列表,并与传统的用户协同过滤UCF和项目协同过滤ICF进行对比实验,结果如图2所示.
图2 三种算法的precision值比较
图2中,横坐标为目标用户的近邻个数取值,纵坐标为算法推荐的准确率precision,三条曲线中,总体变化都是先升后降,其中文章提出的融合时间上下文的改进协同过滤算法UCFT+的推荐准确率最高,其次是UCF,最差的是ICF.可见考虑时间上下文的推荐可以有效提高算法的准确率,且当近邻数取值为20时,算法推荐的准确率precision最高.
4.4多目标优化结果与分析
以一名18岁男生A同学为目标用户,体重为60KG,只选取3个较有代表性的目标函数: 能量、蛋白质和钙,根据表1设置公式(8)中的值.
表1 目标用户的参考摄入值
将UCFT+推荐的融合时间上下文的个性化食材,根据非支配遗传算法NSGA-Ⅱ算法进行多目标优化,得到最终的食材推荐方案.并用式(12)与式(13)进行达标率计算,验证优化算法的有效性.
(12)
Y=(x1,x2,…,xm,…,y1,y2, …,ym,…)
(13)
其中,Y是包含推荐食材和对应的推荐食用量组成的一套推荐方案;是第i类营养素的达标率,表示单位食材中含有营养素i的值,也就是根据RNI确定的用户每日所需的第i种营养素的DRIs标准值.
设置NSGA-Ⅱ中的初始群体规模N=50,交叉概率,变异概率,算法最大迭代次数maxGen=200,并重复试验20次,得到NSGA-Ⅱ优化推荐的各营养素值与用户A实际需求值之间的误差均值,见表2所示.
表2 推荐的营养素与实际需求值之间的误差均值
从表2可以看出,三种营养素的平均达标率都很高,推荐效果理想,说明基于NSGA-Ⅱ的多目标优化方法在营养均衡应用中的有效性.
5结语
针对日益凸显的居民个性化营养饮食推荐问题,文章在传统的UCF算法中融入时间上下文进行改进,实现符合用户动态偏好食材推荐.然后以能量、蛋白质、钙等营养素含量与标准值之差作为目标函数,选择多目标遗传算法NSGA-Ⅱ进行优化.最终形成兼顾用户偏好和营养均衡的个性化饮食推荐方案,并通过实验验证了文章提出的模型在解决个性化饮食推荐中的有效性.