《电子商务数据挖掘实验精编版》由会员分享,可在线阅读,更多相关《电子商务数据挖掘实验精编版(36页珍藏版)》请在金锄头文库上搜索。
1、精品资料推荐电子商务应用实验报告项目名称 电子商务数据挖掘实验专业班级 软件工程1307班学 号 3901130721 姓 名 XXX 实验成绩:批阅教师:实验4电子商务数据挖掘实验实验学时: 2 每组人数: 1 实验类型: 2 (1:基础性 2:综合性 3:设计性 4:研究性)实验要求: 1 (1:必修 2:选修 3:其它)实验类别: 3 (1:基础 2:专业基础 3:专业 4:其它)一、实验目的1. 加深对数据挖掘概念和主要任务的理解。2. 研究并学习几种常用的关联分析算法、分类算法、聚类算法和异常检测方法,了解它们的实现原理以及在电子商务中的应用。3. 研究并学习几种常用的个性化商品或信
2、息推荐方法,并结合选题设计一个简单的商品或信息推荐模型。二、实验内容1. 研究并学习两种常用的关联分析算法的实现原理并编程实现其中一种,编程语言不限。2. 研究并学习两种常用的分类算法的实现原理并编程实现其中一种,编程语言不限。3. 研究并学习两种常用的聚类算法的实现原理并编程实现其中一种,编程语言不限。4. 研究并学习两种常用的异常检测方法的实现原理。5. 研究并学习两种常用的个性化商品或信息推荐方法,了解其实现原理和特点。6. 结合选题,设计一个简单的商品或信息推荐模型。【注意:模型不一定要很复杂,关键是要能够说明其合理性,鼓励大家创新。以下两种商品推荐模型(信息推荐模型思路相似)基本思想
3、供参考,也可在此基础上进行改进: 分析用户的购买记录,找出他经常购买的商品的类型,然后在该类型中找出购买量或者访问量最大但是该买家之前并未购买的商品,并将这些商品推荐给该用户。 找出与该用户具有相似购物习惯的其他用户,例如他们曾经购买过一些相同的商品,然后将其他用户购买过但是该用户未曾购买的商品推荐给他。】三、实验要求1. 研究两种常用的关联分析算法,填写相应的表格,表格必须填写完整,任选一种编程语言实现其中的一种算法,要求提供详细源代码;2. 研究两种常用的分类算法,填写相应的表格,表格必须填写完整,任选一种编程语言实现其中的一种算法,要求提供详细源代码;3. 研究两种常用的聚类算法,填写相
4、应的表格,表格必须填写完整,任选一种编程语言实现其中的一种算法,要求提供详细源代码;4. 研究两种常用的异常检测方法,填写相应的表格,表格必须填写完整;5. 研究两种常用的个性化商品或信息推荐方法,填写相应的表格,表格必须填写完整;6. 结合选题,设计一个简单的商品或信息推荐模型,要求详细说明其实现过程,包括公式、流程等,但无需编程实现。四、实验步骤1. 通过使用搜索引擎并查阅相关资料,研究并整理两种常用的关联分析算法,填写相应的表格并选择一种编程实现;2. 通过使用搜索引擎并查阅相关资料,研究并整理两种常用的分类算法,填写相应的表格并选择一种编程实现;3. 通过使用搜索引擎并查阅相关资料,研
5、究并整理两种常用的聚类算法,填写相应的表格并选择一种编程实现;4. 通过使用搜索引擎并查阅相关资料,研究并整理两种常用的异常检测方法,填写相应的表格;5. 通过使用搜索引擎并查阅相关资料,研究并整理两种常用的电子商务个性化商品或信息推荐方法,填写相应的表格;6. 结合选题,设计一个简单的商品或信息推荐模型。五、实验结果1. 研究并整理两种常用的关联分析算法,编程实现其中一种,填写如下表格:关联分析算法名称实现原理关联分析算法名称:XXX算法/核心实现代码解:关联分析算法名称实现原理Apriori算法1. 第一个关联规则挖掘算法2. 频繁项集的子集也一定是频繁的,如果A,B 是频繁项集,则 A和
6、B 也一定是频繁项集3. 从1到k(k项集)递归查找频繁项集4. 用得到的频繁项集生成关联规则5. Apriori算法的两个输入参数分别是最小支持度和数据集。该算法首先会生成所有单个元素的项集列表。接着扫描数据集来查看哪些项集满足最小支持度要求,那些不满足最小支持度的集合会被去掉。然后,对剩下来的集合进行组合以生成包含两个元素的项集。接下来,再重新扫描交易记录,去掉不满足最小支持度的项集。该过程重复进行直到所有项集都被去掉。蛮力法1. d个项,将产生2d个候选项集2. 总项集个数为2d3. 关联规则的总个数为R=k=1d-1dk j=1d-kd-kj=3d-2d+1+14. 当d=6时,关联规
7、则R的个数为6025. 目标找出所有的频繁项集关联分析算法名称:Apriori算法/核心实现代码#-*- encoding: UTF-8 -*-#-import-#-python代码实现-#-class Apriori(object): def _init_(self, filename, min_support, item_start, item_end): self.filename = filename self.min_support = min_support # 最小支持度 self.min_confidence = 50 self.line_num = 0 # item的行数 s
8、elf.item_start = item_start # 取哪行的item self.item_end = item_end self.location = i for i in range(self.item_end - self.item_start + 1) self.support = self.sut(self.location) self.num = list(sorted(set(j for i in self.location for j in i)# 记录item self.pre_support = # 保存前一个support,location,num self.pre
9、_location = self.pre_num = self.item_name = # 项目名 self.find_item_name() self.loop() self.confidence_sup() def deal_line(self, line): 提取出需要的项 return i.strip() for i in line.split( ) if iself.item_start - 1:self.item_end def find_item_name(self): 根据第一行抽取item_name with open(self.filename, r) as F: for
10、index,line in enumerate(F.readlines(): if index = 0: self.item_name = self.deal_line(line) break def sut(self, location): 输入1,2,3,2,3,4,1,3,5. 输出每个位置集的support 123,435,234. with open(self.filename, r) as F: support = 0 * len(location) for index,line in enumerate(F.readlines(): if index = 0: continue
11、# 提取每信息 item_line = self.deal_line(line) for index_num,i in enumerate(location): flag = 0 for j in i: if item_linej != T: flag = 1 break if not flag: supportindex_num += 1 self.line_num = index # 一共多少行,出去第一行的item_name return support def select(self, c): 返回位置 stack = for i in self.location: for j in self.num: if j in i: if len(i) = c: stack.append(i) else: stack.append(j + i) # 多重列表去重 import itertools s = sorted(sorted(i) for i in stack) location = list(s for s,_ in itertools.groupby(s) return location def del_location(self, support, location): 清除不