当前位置:首页 > IT计算机/网络 > 电子商务 > 3901130721-谭淇蔚-电子商务实验4
1《电子商务应用》实验报告项目名称电子商务数据挖掘实验专业班级软件工程1307班学号3901130721姓名谭淇蔚实验成绩:批阅教师:2015年11月25日2实验4《电子商务数据挖掘实验》实验学时:2每组人数:1实验类型:2(1:基础性2:综合性3:设计性4:研究性)实验要求:1(1:必修2:选修3:其它)实验类别:3(1:基础2:专业基础3:专业4:其它)一、实验目的1.加深对数据挖掘概念和主要任务的理解。2.研究并学习几种常用的关联分析算法、分类算法、聚类算法和异常检测方法,了解它们的实现原理以及在电子商务中的应用。3.研究并学习几种常用的个性化商品或信息推荐方法,并结合选题设计一个简单的商品或信息推荐模型。二、实验内容1.研究并学习两种常用的关联分析算法的实现原理并编程实现其中一种,编程语言不限。2.研究并学习两种常用的分类算法的实现原理并编程实现其中一种,编程语言不限。3.研究并学习两种常用的聚类算法的实现原理并编程实现其中一种,编程语言不限。4.研究并学习两种常用的异常检测方法的实现原理。5.研究并学习两种常用的个性化商品或信息推荐方法,了解其实现原理和特点。6.结合选题,设计一个简单的商品或信息推荐模型。【注意:模型不一定要很复杂,关键是要能够说明其合理性,鼓励大家创新。以下两种商品推荐模型(信息推荐模型思路相似)基本思想供参考,也可在此基础上进行改进:①分析用户的购买记录,找出他经常购买的商品的类型,然后在该类型中找出购买量或者访问量最大但是该买家之前并未购买的商品,并将这些商品推荐给该用户。②找3出与该用户具有相似购物习惯的其他用户,例如他们曾经购买过一些相同的商品,然后将其他用户购买过但是该用户未曾购买的商品推荐给他。】三、实验要求1.研究两种常用的关联分析算法,填写相应的表格,表格必须填写完整,任选一种编程语言实现其中的一种算法,要求提供详细源代码;2.研究两种常用的分类算法,填写相应的表格,表格必须填写完整,任选一种编程语言实现其中的一种算法,要求提供详细源代码;3.研究两种常用的聚类算法,填写相应的表格,表格必须填写完整,任选一种编程语言实现其中的一种算法,要求提供详细源代码;4.研究两种常用的异常检测方法,填写相应的表格,表格必须填写完整;5.研究两种常用的个性化商品或信息推荐方法,填写相应的表格,表格必须填写完整;6.结合选题,设计一个简单的商品或信息推荐模型,要求详细说明其实现过程,包括公式、流程等,但无需编程实现。四、实验步骤1.通过使用搜索引擎并查阅相关资料,研究并整理两种常用的关联分析算法,填写相应的表格并选择一种编程实现;2.通过使用搜索引擎并查阅相关资料,研究并整理两种常用的分类算法,填写相应的表格并选择一种编程实现;3.通过使用搜索引擎并查阅相关资料,研究并整理两种常用的聚类算法,填写相应的表格并选择一种编程实现;4.通过使用搜索引擎并查阅相关资料,研究并整理两种常用的异常检测方法,填写相应的表格;5.通过使用搜索引擎并查阅相关资料,研究并整理两种常用的电子商务个性化商品或信息推荐方法,填写相应的表格;6.结合选题,设计一个简单的商品或信息推荐模型。4五、实验结果1.研究并整理两种常用的关联分析算法,编程实现其中一种,填写如下表格:关联分析算法名称实现原理关联分析算法名称:XXX算法//核心实现代码解:关联分析算法名称实现原理Apriori算法1.第一个关联规则挖掘算法2.频繁项集的子集也一定是频繁的,如果{A,B}是频繁项集,则{A}和{B}也一定是频繁项集3.从1到k(k项集)递归查找频繁项集4.用得到的频繁项集生成关联规则5.Apriori算法的两个输入参数分别是最小支持度和数据集。该算法首先会生成所有单个元素的项集列表。接着扫描数据集来查看哪些项集满足最小支持度要求,那些不满足最小支持度的集合会被去掉。然后,对剩下来的集合进行组合以生成包含两个元素的项集。接下来,再重新扫描交易记录,去掉不满足最小支持度的项集。该过程重复进行直到所有项集都被去掉。1.d个项,将产生2d个候选项集5蛮力法2.总项集个数为2d3.关联规则的总个数为𝐑=∑[(𝒅𝒌)×∑(𝒅−𝒌𝒋)𝒅−𝒌𝒋=𝟏]𝒅−𝟏𝒌=𝟏=𝟑𝒅−𝟐𝒅+𝟏+𝟏4.当d=6时,关联规则R的个数为6025.目标找出所有的频繁项集关联分析算法名称:Apriori算法//核心实现代码#-*-encoding:UTF-8-*-#---------------------------------import------------------------------------#------------------------------python代码实现--------------------------#---------------------------------------------------------------------------classApriori(object):def__init__(self,filename,min_support,item_start,item_end):self.filename=filenameself.min_support=min_support#最小支持度self.min_confidence=50self.line_num=0#item的行数self.item_start=item_start#取哪行的itemself.item_end=item_endself.location=[[i]foriinrange(self.item_end-self.item_start6+1)]self.support=self.sut(self.location)self.num=list(sorted(set([jforiinself.locationforjini])))#记录itemself.pre_support=[]#保存前一个support,location,numself.pre_location=[]self.pre_num=[]self.item_name=[]#项目名self.find_item_name()self.loop()self.confidence_sup()defdeal_line(self,line):提取出需要的项return[i.strip()foriinline.split('')ifi][self.item_start-1:self.item_end]deffind_item_name(self):根据第一行抽取item_namewithopen(self.filename,'r')asF:7forindex,lineinenumerate(F.readlines()):ifindex==0:self.item_name=self.deal_line(line)breakdefsut(self,location):输入[[1,2,3],[2,3,4],[1,3,5]...]输出每个位置集的support[123,435,234...]withopen(self.filename,'r')asF:support=[0]*len(location)forindex,lineinenumerate(F.readlines()):ifindex==0:continue#提取每信息item_line=self.deal_line(line)forindex_num,iinenumerate(location):flag=0forjini:ifitem_line[j]!='T':flag=1break8ifnotflag:support[index_num]+=1self.line_num=index#一共多少行,出去第一行的item_namereturnsupportdefselect(self,c):返回位置stack=[]foriinself.location:forjinself.num:ifjini:iflen(i)==c:stack.append(i)else:stack.append([j]+i)#多重列表去重importitertoolss=sorted([sorted(i)foriinstack])location=list(sfors,_initertools.groupby(s))returnlocation9defdel_location(self,support,location):清除不满足条件的候选集#小于最小支持度的剔除forindex,iinenumerate(support):ifiself.line_num*self.min_support/100:support[index]=0#apriori第二条规则,剔除forindex,jinenumerate(location):sub_location=[j[:index_loc]+j[index_loc+1:]forindex_locinrange(len(j))]flag=0forkinsub_location:ifknotinself.location:flag=1breakifflag:support[index]=0#删除没用的位置location=[ifori,jinzip(location,support)ifj!=0]support=[iforiinsupportifi!=0]returnsupport,location10defloop(self):s级频繁项级的迭代s=2whileTrue:print'-'*80print'The',s-1,'loop'print'location',self.locationprint'support',self.supportprint'num',self.numprint'-'*80#生成下一级候选集location=self.select(s)support=self.sut(location)support,location=self.del_location(support,location)num=list(sorted(set([jforiinlocationforjini])))s+=1iflocationandsupportandnum:self.pre_num=self.numself.pre_location=self.locationself.pre_support=self.support11self.num=numself.location=locationself.support=supportelse:breakdefconfidence_sup(self):计算confidenceifsum(self.pre_support)==0:print'min_supporterror'#第一次迭代即失败else:forindex_location,each_locationinenumerate(self.location):del_num=[each_location[:index]+each_location[index+1:]forindexinrange(len(each_location))]#生成上一级频繁项级del_num=[iforiindel_numifiinself.pre_location]#删除不存在上一级频繁项级子集del_support=[self.pre_support[self.pre_location.index(i)]foriindel_numifiinself.pre_location]#从上一级支持度查找#printdel_num12#printself.support[index_location]#printdel_supportforindex,iinenumerate(del_num)
本文标题:3901130721-谭淇蔚-电子商务实验4
链接地址:https://www.777doc.com/doc-25548 .html