具体实施方式
下面结合具体实施方式对本发明进行详细说明。
本发明基于位置的个性化美食推荐方法的结构如图1所示。推荐系统一般由三部分组成,即输入功能模块、推荐引擎模块与输出功能模块。本推荐方法主要的输入信息包括用户注册的时候个人信息和用户启动软件获取到的用户位置。推荐引擎模块是本推荐方法的核心,结合了基于用户和基于项目的混合推荐方法。输出模块主要是推荐的TopN商家。具体的推荐流程如下:用户启动软件的时候会获取用户的位置经纬度传到后端,后端会根据用户经纬度选取离用户最近的N个商家或离用户在k千米内的商家进行推荐。推荐模块部分,基于用户推荐,根据用户对商家的评分计算目标用户与其他用户的相似度,然后根据用户的属性计算目标用户和其他用户的属性相似度,用一定的系数组合两个相似度,得出目标用户的邻近用户。根据邻近用户计算用户未评分的商家的预测评分,最后基于用户的TopN推荐商家。基于商户推荐,根据用户对商家的评分计算商户与其他商户的相似度,然后根据商户的属性计算商户和其他商户的属性相似度,用一定的系数组合两个相似度,得出商户的邻近商户。根据邻近商户计算用户未评分的商家的预测评分,最后得出基于用户的TopN推荐商家。用一定的系数组合基于用户的推荐和基于项目的推荐以及用户商户的位置的推荐,综合三个推荐,将得出的结果推荐给用户。
步骤1:计算用户和商家之间的距离相似度
计算两点的距离,原理如下:假如U(xt,yt),S(xu,yu)是用户U和商家S的位置,其中x表示纬度,y表示经度。设a=cos(xt-xu)、b=cos(yt-yu),cxtu=cos(xt)·cos(xu),R代表地球半径。那么当前用户和商家的距离如下公式:
根据用户和商家之间的距离可以过滤掉D(i,j)<K(K=10km)的商家。
用户和商家之间的距离相似度可以用上面的式子表示,距离越远,此值越小。
步骤2:计算用户i和用户j的相似度simuser(i,j);
simuser(i,j)=λ·simr(ui,uj)+(1-λ)·simc(i,j)
其中,simr(ui,uj)表示用户对项目评分的相似性,simc(i,j)表示用户间属性的相似性。λ表示用户对项目评分相似性在计算中贡献系数。(1-λ)表示用户间属性的相似性在计算中的计算贡献系数。
1.用户对项目评分相似性的计算
其中ui表示用户i,uj表示用户j,表示用户ui对所有商品评分的平均值,表示用户ui对商品i的评分;表示用户uj对所有商品评分的平均值,表示用户uj对商品j的评分;
2.simc(i,j)用户间属性的相似性的计算
不同特征的人拥有的兴趣爱好可能不同,而同一类别的人兴趣爱好则具有一定的相似度。所以在寻找目标用户的最近邻居时,用户特征也是一个不容忽视的因素。通过构建用户特征向量,有助于寻找与目标用户更相似的邻居。
将职业空间中的所有职业按其类别描述成一个倒立的树,如图2所示,树的总层数称为树的高度,记为H。职业a,b在树中最近的共同父类称为a,b的最近父类,其位职业树上的层次称为其高度,记作Ha,b,当a,b的最近父类为树的根节点时,Ha,b=0。设用户u的职业为a,用户v的职业为b,定义用户u,v在职业相似度O(u,v)为
例如职业树的高度H=4,对职业a和职业b而言,最近共同父类为职业类A,其相应的Ha,b=2,由此职业a,b的相似度为0.5。
设用户u的的年龄为Au,用户v的年龄为Av,则用户u,v的年龄相似性A(u,v)表示为
设用户u的性别为Su,用户v的性别为Sv,则用户u,v的性别相似度S(u,v)表示为:
用户u和v的属性相似度simc(u,v)通过如下式来计算:
simc(u,v)=χS(u,v)+δA(u,v)+(1-χ-δ)O(u,v)
Χ,σ为修正系数(初值可取χ=0.3,σ=0.4),分别影响性别、年龄和职业三个因素在计算用户特征相似度所起的作用。一般根据统计信息或实验结果来调整其大小,不同的推荐系统,可以动态调整其值来优化推荐效果。
步骤3:计算目标用户对餐厅的预测偏好指数Puser(t,u);
最近邻居选取:
最近邻居的选取通常有两种方法,分别是K最近邻方法和预先设定相似度阈值的方法,本文选取最近邻居时采用预先设定用户相似度阈值的方法。预先设定用户相似度阈值选取用户最近邻居的方法如
simuser(i,j)>=w1
w1表示预先指定的用户相似度阈值,当用户ui和用户uj的相似度simuser(i,j)不小于w1时,用户ui就是用户uj的最近邻居。
目标用户对餐厅的预测偏好指数:
Au是指用户u对项目的平均评分,c是指用户u的所有最近邻居的
数目,Ri,t是指用户u的近邻用户ui对项目t的评分,Ai是指用户ui对项目的平均评分,simuser(u,i)是指用户u和用户ui的相似度。
步骤4:计算项目i和项目j的相似度simitem(i,j);
itemCF计算用户评分,其计算公式为:
simitem(i,j)=λ·simr(i,j)+(1-λ)·simc(i,j)
其中,simr(i.j)表示项目评分的相似性,simc(i,j)表示项目类别的相似性。λ表示用户对项目评分相似性在计算中贡献系数。(1-λ)表示用户间属性的相似性在计算中的计算贡献系数。
1.项目评分相似性的计算
其中simr(i,j)表示项目i和j的相似性。u表示对项目i和j共同评分的用户,U(i)表示对项目i评分的用户集合,U(j)表示项目j评分的用户集合,u属于U(i)和U(j)的交集。Ru,i表示用户u对项目i的评分Ru,j表示用户u对项目j的评分。和分别表示基于用户对项目i和j共同评分数据的项目i和j的评分均值。
2.项目的类别相似性
在各种不同的系统中,所提供的项目一般都是以类别进行划分。如餐饮行业可以按照不同的口味进行划分。如图3所示,本发明将项目的类别表示为集合C={c1,c2,c3,c4,c5,.....,ck},其中c1={c11,c12,c13,c14,c15.....,,c1k},这里C表示项目的大的类别,ck表示c中的第k个类,ck还可以进行类别划分。
我们把由于项目分类的不同引起的相似性称为项目类别相似度,只要获取项目的类别信息,就可以计算它们的类别相似性。对于项目i与j,其所属的类别分别表示为集合ci和cj。由前面的分析已知,当项目i与j同属的相同类别越多,则它们的相似性越强。所以,项目i与j的类别相似度simc(i,j)可以通过他们的类别集合来计算,表示如下:
其中Ci∩Cj表示项目i与j所属相同类别的交集元素个数,Ci∪Cj表示项目i与j所属类别的并集的元素个数,二者的比值体现了项目i与j的类别相似程度。
步骤5:计算基于项目t对用户u的推荐偏好指数Pitem(t,u)
最近邻居选取
最近邻居的选取通常有两种方法,分别是K最近邻方法和预先设定相似度阈值的方法,本文选取最近邻居时采用预先设定用户相似度阈值的方法。预先设定用户相似度阈值选取用户最近邻居的方法如
simitem(i,j)>=w2
w2表示预先指定的项目相似度阈值,当项目i和项目j的相似度simitem(i,j)不小于w2时,项目i就是项目j的最近邻居。
At是指用户u的所有用户近邻对项目t的平均评分,m是指项目t的所有项目最近邻居数目,Ru,r是指用户u对项目r的评分,simitem(t,r)是指项目t和项目近邻r的相似度,这个相似度指的是项目特征和项目评分相似度利用适当的权值结合后的项目相似度。
步骤6:给出推荐结果;
根据用户和商家之间的距离相似度、目标用户对餐厅的预测偏好指数和
基于项目t对用户u的推荐偏好指数给出推荐结果
其中w表示Puser(t,u)所占的比重,初始值可取0.5。
本发明的优点还在于结合用户当前所处位置、用户对商家评分以及用户和商家的属性,为之推荐满足用户需求的个性化的餐厅,提高美食推荐的效率和准确度。同时,精确的推荐结果可转化为消费行为,提高用户满意度和商家效益。本发明推荐方法根据用户的位置,用户对商家评分和用户之间的相似度等因素,充分克服了传统推荐算法没有移动端获取用户位置的因素,提高了推荐的准确性。通过位置对商家进行过滤,减小了矩阵的维度,减轻了计算量。同时也客服了传统协同过滤冷启动等问题。
以上所述仅是对本发明的较佳实施方式而已,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施方式所做的任何简单修改,等同变化与修饰,均属于本发明技术方案的范围内。