科研报告餐饮电子商务个性化推荐系统推荐算法.docx

上传人:b****8 文档编号:9951919 上传时间:2023-02-07 格式:DOCX 页数:18 大小:240.50KB
下载 相关 举报
科研报告餐饮电子商务个性化推荐系统推荐算法.docx_第1页
第1页 / 共18页
科研报告餐饮电子商务个性化推荐系统推荐算法.docx_第2页
第2页 / 共18页
科研报告餐饮电子商务个性化推荐系统推荐算法.docx_第3页
第3页 / 共18页
科研报告餐饮电子商务个性化推荐系统推荐算法.docx_第4页
第4页 / 共18页
科研报告餐饮电子商务个性化推荐系统推荐算法.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

科研报告餐饮电子商务个性化推荐系统推荐算法.docx

《科研报告餐饮电子商务个性化推荐系统推荐算法.docx》由会员分享,可在线阅读,更多相关《科研报告餐饮电子商务个性化推荐系统推荐算法.docx(18页珍藏版)》请在冰豆网上搜索。

科研报告餐饮电子商务个性化推荐系统推荐算法.docx

科研报告餐饮电子商务个性化推荐系统推荐算法

中南大学

科研训练报告

餐饮电子商务个性化推荐系统推荐算法研究

 

院系:

软件学院

班级:

1105班

姓名:

学号:

指导老师:

 

餐饮电子商务个性化推荐系统推荐算法研究

TheResearchonrecommendationalgorithmofRecommendationSysteminCateringE-Commerce

 

指导老师:

 

餐饮电子商务个性化推荐系统推荐算法科研报告

 

摘要:

本文首先阐述了本算法的思想,基于分类的协同过滤推荐算法。

给出了形式化的数学表达式。

给出了协同过滤算法部分的详细代码和实验过程。

然后,本文讨论了实验平台的改进设想。

最后讨论了基于Hadoop和Mahout 平台推荐算法的实现。

Abstract:

Thispaperfirstexpoundsthethoughtofthisalgorithm,thecollaborativefilteringrecommendationalgorithmbasedonclassification.Theformalmathematicalexpressionsaregiven.Detailedcodepartofthecollaborativefilteringalgorithmisproposedandtheexperimentalprocess.Thenthispaperdiscussestheexperimentplatformofimprovementideas.IntheendimplementationofrecommendedalgorithmisdiscussedbasedonHadoopandMahout platform.

关键词:

推荐系统;协同过滤;Hadoop;Mahout 

Keywords:

recommendationsystem;Collaborativefiltering;Hadoop

 

一、算法概述

不同的推荐系统,它们的推荐算法和评价指标都不尽相同。

作为餐饮推荐系统,至少存在以下几个方面,与传统(如图书)的推荐系统(购买行为)不同。

(1)受地域和消费水平影响非常大。

对于餐饮来说,极少会有去很远的地方或与自身消费相去甚远的餐馆消费。

(2)餐饮往往还有社交因素。

有很多餐饮消费发生在宴请、聚餐等行为。

(3)餐饮还有重复性消费的特点。

由于时间和本人自身水平问题,很多问题尚不能考虑完全。

暂且提出如下的推荐算法。

(1)根据餐馆和用户的位置,将餐馆和用户分类。

相同地区的餐馆和用户才能发生相应关系。

这样做第一可以提高推荐质量,更主要的是可以减少算法的开销。

(2)根据购买记录、浏览记录以及用户兴趣模型综合评分。

这样可以在一定程度上解决冷启动问题和评分稀疏性问题。

(3)根据评分利用协同过滤方法进行推荐。

二、协同过滤算法的实现

2.1基于用户的协同过滤算法主要步骤描述

由于时间问题和实验条件(缺乏实验数据源),本次训练暂且实现了基于用户的协同过滤算法。

算法的主要步骤如下。

数据表示:

在Userbased协同过滤推荐中,必须根据不同用户对商品的评分信息产生推荐结果。

用户评分数据可以用一个m’n阶矩阵A(m,n)表示,m行代表m个用户,n列代表n个项,第i行第j列的元素凡J代表用户i对项j的评分。

用户评分数据矩阵如图2.1所示。

图2.1:

用户评分矩阵

最近邻查询:

最近邻查询是整个Useobased协同过滤推荐算法的核心部分,其效果和效率

很大程度上决定了User一based协同过滤推荐算法的效果和效率。

所谓最近邻居,就是购买行为或评分行为与当前用户比较相似的若干用户。

最近邻查询阶段实质上就是Userbased协同过滤推荐算法的模型建立阶段。

1).余弦相似性(Cosine):

用户评分看作为n维项空间上的向量,如果用户对项没有进行评分,则将用户对该项的评分设为O,用户间的相似性通过向量间的余弦夹角度量。

设用户i和用户j在n维项空间上的评分分别表示为向量I,j,则用户i和用户j之间的相似性sim(I,j)为:

分子为两个用户评分向量的内积,分母为两个用户向量模的乘积。

通过上面提出的相似性度量方法得到目标用户的最近邻居,下一步需要产生

相应的推荐。

设用户u的最近邻居集合用刀N公表示,则用户u对项i的预测评分pu,,可以通过用户u对最近邻居集合凡叽中项的评分得到,计算方法如下

sim(u,n)表示用户u与用户n之间的相似性,Rn.j表示用户n对项i的评分。

Ru

和Rn分别表示用户u和用户n对项的平均评分。

2.2实验的具体方法和步骤

实验环境:

开发工具:

MyEclipe8.5语音:

java

数据源;

用户评分矩阵

staticdouble[][]userScore=newdouble[][]{

{2,4,4,4,3,3,2,2},

{3,2,3,4,2,4,2,3},

{1,3,4,3,3,3,1,2},

{1,3,4,3,3,5,3,2},

{1,3,5,4,4,3,2,1},

{3,2,3,3,3,3,2,3},

{3,4,4,3,3,3,2,2},

{4,2,5,3,3,3,1,1},

};

 

相关代码:

importjava.util.Arrays;

publicclassuserCF{

/**

*@paramargs

*/

//索引分别代表用户和商品,项代表用户对商品的评分

staticdouble[][]userScore=newdouble[][]{

{2,4,4,4,3,3,2,2},

{3,2,3,4,2,4,2,3},

{1,3,4,3,3,3,1,2},

{1,3,4,3,3,5,3,2},

{1,3,5,4,4,3,2,1},

{3,2,3,3,3,3,2,3},

{3,4,4,3,3,3,2,2},

{4,2,5,3,3,3,1,1},

};

staticdouble[][]sim=newdouble[][]{

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

};

staticdouble[][]preScore=newdouble[][]{

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0},

};

//相似用户集合

staticint[]nearUser=newint[]{0,0,0};

//计算相似度矩阵

publicstaticvoidsetSim(){

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

sim[i][j]=vectorInnerProduct(i,j)/vectorProduct(i,j);

}

}

}

//计算向量模的乘积

publicstaticdoublevectorProduct(intvector1,intvector2){

intProduct1=0;

intProduct2=0;

for(inti=0;i<8;i++){

Product1+=userScore[vector1][i]*userScore[vector1][i];

}

for(inti=0;i<8;i++){

Product2+=userScore[vector2][i]*userScore[vector2][i];

}

returnMath.sqrt(Product1)*Math.sqrt(Product2);

}

//计算向量内积

publicstaticdoublevectorInnerProduct(intvector1,intvector2){

doubletoutle=0;

for(inti=0;i<8;i++){

toutle+=userScore[vector1][i]*userScore[vector2][i];

}

returntoutle;

}

//功能:

将相似度最大的三个用户索引号按序储存在数组nearUser

publicstaticvoidsimMax(intuser){

double[]tempSort=newdouble[8];

for(inti=0;i<8;i++){

tempSort[i]=sim[user][i];

}

Arrays.sort(tempSort);

for(inti=0;i<8;i++){

if(tempSort[6]==sim[user][i]){

nearUser[0]=i;

break;

}

}

for(inti=0;i<8;i++){

if(tempSort[5]==sim[user][i]){

nearUser[1]=i;

break;

}

}

for(inti=0;i<8;i++){

if(tempSort[4]==sim[user][i]){

nearUser[2]=i;

break;

}

}

}

//计算用户对项目的平均评分

publicstaticdoubleavgUserToItem(intuser){

doubletotalUserToItem=0;

for(inti=0;i<8;i++){

totalUserToItem+=userScore[user][i];

}

returntotalUserToItem/8;

}

//计算预测得分

publicstaticdoublepredictiveScore(intuser,intitem){

doubleScore=0;

doublesum1=0;

doublesum2=0;

for(inti=0;i<3;i++){

sum1+=sim[user][nearUser[i]]*(userScore[nearUser[i]][item]-avgUserToItem(nearUser[i]));

}

for(inti=0;i<3;i++){

sum2+=sim[user][nearUser[i]];

}

Score=avgUserToItem(user)+sum1/sum2;

returnScore;

}

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

setSim();

simMax(0);

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

preScore[i][j]=predictiveScore(i,j);

}

}

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

System.out.print(preScore[i][j]+"");

}

System.out.println();

}

//平均准确度误差

doubleavePre=0;

doubletotlePre=0;

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

totlePre+=Math.abs((userScore[i][j]-preScore[i][j])/userScore[i][j]);

}

}

avePre=totlePre/64;

//平均准确度随机误差

doubleavePreR=0;

doubletotlePreR=0;

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

totlePreR+=Math.abs((userScore[i][j]-Math.random()*5)/userScore[i][j]);

}

}

avePre=totlePre/64;

System.out.println(avePre);

avePreR=totlePreR/64;

System.out.println(avePreR);

}

}

2.3实验的运行结果

如图2.3所示

图2.3:

运行结果图

可知采用此算法平均误差百分比为25.13%

采用随机数对比平均误差百分比为61.63%

实验表明本算法是具有显著效果的。

如果是客观的数据源,我相信其准确率还会增加。

三、实验平台的改进

在数据挖掘中,往往是大规模数据。

本次实验室在极为普通的环境下实现,并没有考虑到实际应用中的问题。

本次科研训练中我也尝试在一些专业的平台下实验。

3.1weka平台

众所周知,weka是一款极为流行的数据挖掘平台工具。

研究生助教也是给我们介绍的是这个平台。

Weka平台我认为有以下几个优点:

(1)使用简单。

很多数据挖掘算法只要轻轻一点,即可完成。

(2)数据图形化。

很多算法可以提供图形化的结果和挖掘过程。

(3)开源免费。

可以进行二次开发。

Weka平台如果想加入自己的算法,就必须根据其源码进行二次开发。

我的开发环境为MyEclipe8.5。

导入开发包后的工程目录如图3.1所示。

图3.1:

工程目录

主要的包如图3.2所示。

图3.2:

主要的包目录

如包的名字所示。

主要算法在相对的包中,weka.core提供了基本的功能类(类目录如图3.3所示)。

主要的类有Attribute类,提供了属性的相关操作。

Instance类提供了实例的相关操作。

Weka.gui包提供了关于图形化界面的相关功能。

图3.3:

weka.core包目录

加入算法的步骤比较简单。

根据weka的API规范写出算法类。

然后可以在图形化接口中加入相关算法的选项。

但是我们做的有关推荐算法,比如协同推荐,在weka中却没有任何体现和相关类或接口。

所以我认为用weka作为实验工具做个性化推荐算法不是一个好的选择。

3.2Hadoop和Mahout 平台

Hadoop是当前热门的云计算解决方案之一,是Apache组织的一个开源的分布式计算平台,以Hadoop分布式文件系统(HDFS)和MapReduce为核心为用户提供了系统底层细节透明的分布式基础架构.从而用户可以利用Hadoop轻松地组织计算机资源,搭建自己的分布式计算平台,并且可以充分利用集群的计算和存储能力,完成海量数据的处理.现在Hadoop已经发展成为包含了多个子项目的集合,它们提供互补性服务或在核心层上提供了更高层的服务。

显然利用Hadoop平台是一个非常好的选择。

在选择数据库(数据仓库)上HBase是个很好的选择。

HBase是一个分布式、面向列的开源数据库,在Hadoop之上提供类似Bigtable的能力.不同于一般关系数据库的数据模型,用户将数据存储在一个表里,一个数据行拥有一个可选择的键和任意数量的列.主要用于需要随机访问、实时读取的大数据.相比其他传统关系型数据库,HBase数据库有以下优势.

HBase是一个基于列模式的映射数据库,HTable为null的Column不会被存储,这样既节省了空间又提高了读性能,很适宜存储松散型数据.

HBase架构在Hadoop上,不仅具有很好的可收缩性,当数据越来越大时,只要扩展Hadoop集群,HBase会自动水平切分扩展,跟Hadoop的无缝集合保障了其数据库可靠性和海量数据分析的高性能.HBase能够结合使用MapReduce编程框架并行处理大规模数据,使得数据存储与并行计算完美地结合在一起。

实际上Apache基金会还提供了另一个关于机器学习和数据挖掘的开源项目Mahout。

Mahout平台

Mahout是ApacheSoftwareFoundation(ASF)旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。

Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。

此外,通过使用ApacheHadoop库,Mahout可以有效地扩展到云中。

Mahout项目中给出了一个关于协同过滤算法的高效实现。

其相关的组件图如3.4所示。

图3.4:

Mahout中协同过滤算法实现的组件图

很遗憾,由于时间的限制,我还没有完成Hadoop和Mahout平台上关于本算法和系统的实现。

 

四、科研训练总结

本次科研训练,我对数据挖掘,特别是个性化推荐系统有了一定了解。

锻炼了我一定的自学能力和科研能力。

掌握了做科研的部分方法,如查文献等。

对我的成长具有很大的帮助。

本次训练也留下了很多遗憾的地方。

算法的实现很有限。

自己也还未实现或提出一个创新其有效的算法。

造成以下的原因我想可能有以下几个方面。

1)时间极为有限。

从选题到做科研,再到写报告一共尽16天时间。

2)自己没有相关方面基础。

数据挖掘机相关知识需要一定的知识基础。

我们过去在课堂上自然没有接触过。

而我本身是学习嵌入式方向的,在这方面也没有自学。

3)没有数据源。

如果自己造数据,那么就失去了数据的客观性。

没有数据源似乎有巧妇难为无米之炊的难言之隐。

虽然本次科研训练的课程已经结束,报告也已经提交了。

但是我关于这方面的研究一定会继续下去。

下一步我将会对数据挖掘的基本知识和方法进行学习,对Hadoop和Mahout平台进行研究。

力争完成一个高效的、具有创新性的算法。

 

参考文献:

[1]邓爱林.电子商务推荐系统关键技术研究[博士学位论文].上海:

复旦大学,2003.

[2]刘建国,周涛,汪秉宏.个性化推荐系统的研究进展[J].自然科学进展,2009,19

(1):

1-15.

[3]王国霞,刘贺平.个性化推荐系统综综述[j]。

计算机工程与应用,2012,47(8).

[4].刘玮电子商务系统中的信息推荐方法研究[期刊论文]-情报科学2006(02)

[5]陈君;唐雁基于Web社会网络的个性化Web信息推荐模型[期刊论文]-计算机科学2006(04)

[6]赵鹏;耿焕同;王清毅基于聚类和分类的个性化文章自动推荐系统的研究[期刊论文]-南京大学学报(自然科学版)2006(05)

[7]刘庆华,个性化推荐技术及其在电子商务中的应用[学位论文]2007

[8].田晓珍;尚冬娟Web的个性化服务2008(07)

[9]李勇;徐振宁;张维明Internet个性化信息服务研究综述[期刊论文]-计算机系统应用2013(7)

[10]杨志文;刘波基于Hadoop平台协同过滤推荐算法[期刊论文]-计算机工程与应用2002(19)

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1