已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子商务应用实验报告项目名称 电子商务数据挖掘实验专业班级 软件工程1307班学 号 3901130721 姓 名 谭淇蔚 实验成绩:批阅教师:2015年 11月25 日实验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. 结合选题,设计一个简单的商品或信息推荐模型。【注意:模型不一定要很复杂,关键是要能够说明其合理性,鼓励大家创新。以下两种商品推荐模型(信息推荐模型思路相似)基本思想供参考,也可在此基础上进行改进: 分析用户的购买记录,找出他经常购买的商品的类型,然后在该类型中找出购买量或者访问量最大但是该买家之前并未购买的商品,并将这些商品推荐给该用户。 找出与该用户具有相似购物习惯的其他用户,例如他们曾经购买过一些相同的商品,然后将其他用户购买过但是该用户未曾购买的商品推荐给他。】三、实验要求1. 研究两种常用的关联分析算法,填写相应的表格,表格必须填写完整,任选一种编程语言实现其中的一种算法,要求提供详细源代码;2. 研究两种常用的分类算法,填写相应的表格,表格必须填写完整,任选一种编程语言实现其中的一种算法,要求提供详细源代码;3. 研究两种常用的聚类算法,填写相应的表格,表格必须填写完整,任选一种编程语言实现其中的一种算法,要求提供详细源代码;4. 研究两种常用的异常检测方法,填写相应的表格,表格必须填写完整;5. 研究两种常用的个性化商品或信息推荐方法,填写相应的表格,表格必须填写完整;6. 结合选题,设计一个简单的商品或信息推荐模型,要求详细说明其实现过程,包括公式、流程等,但无需编程实现。四、实验步骤1. 通过使用搜索引擎并查阅相关资料,研究并整理两种常用的关联分析算法,填写相应的表格并选择一种编程实现;2. 通过使用搜索引擎并查阅相关资料,研究并整理两种常用的分类算法,填写相应的表格并选择一种编程实现;3. 通过使用搜索引擎并查阅相关资料,研究并整理两种常用的聚类算法,填写相应的表格并选择一种编程实现;4. 通过使用搜索引擎并查阅相关资料,研究并整理两种常用的异常检测方法,填写相应的表格;5. 通过使用搜索引擎并查阅相关资料,研究并整理两种常用的电子商务个性化商品或信息推荐方法,填写相应的表格;6. 结合选题,设计一个简单的商品或信息推荐模型。五、实验结果1. 研究并整理两种常用的关联分析算法,编程实现其中一种,填写如下表格:关联分析算法名称实现原理关联分析算法名称:XXX算法/核心实现代码解:关联分析算法名称实现原理Apriori算法1. 第一个关联规则挖掘算法2. 频繁项集的子集也一定是频繁的,如果A,B 是频繁项集,则 A和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时,关联规则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的行数 self.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_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 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 # 提取每信息 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): 清除不满足条件的候选集 # 小于最小支持度的剔除 for index,i in enumerate(support): if i self.min_confidence: print ,.join(s) , - , self.item_nameeach_locationindex , min_support: , str(support) + % , min_confidence: , str(confidence) + %def main(): c = Apriori(basket.txt, 14, 3, 13) d = Apriori(simple.txt, 50, 2, 6)if _name_ = _main_:main()“”filename:(路径)文件名min_support:最小支持度item_start:item起始位置item_end:item结束位置“”2. 研究并整理两种常用的分类算法,编程实现其中一种,填写如下表格:分类算法名称实现原理分类算法名称:XXX算法/核心实现代码解:分类算法名称实现原理KNN(K最近邻法)设有c个类为w1, , wi, wc,每类有Ni个样本 (i = 1c),则第i类i的判别函数为gix=minix-xik,k=1,2,N|.|表示距离或相似度(通常用欧氏距离)如果gix=minigi(x)那么决策xil 设有N个样本分布到c个类为w1, , wi, wc,每类有Ni个样本,i=1c。在全部样本找出k个最近距离的近邻, k个近邻分布于c个类中数目用ki表示。k近邻的判别函数为:gix=ki,i=1,2,.,,cl 决策规则:如果gjx=argmaxiki那么决策xj向量空间模型(Vector Space Model, VSM)分类VSM概念简单,把对文本内容的处理简化为向量空间中的向量运算,并且它以空间上的相似度表达语义的相似度,直观易懂。当文档被表示为文档空间的向量,就可以通过计算向量之间的相似性来度量文档间的相似性。文本处理中最常用的相似性度量方式是余弦距离。M个无序特征项ti,词根/词/短语/其他每个文档dj可以用特征项向量来表示(a1j,a2j,aMj)权重计算,N个训练文档AM*N= (aij) 文档相似度比较1)Cosine计算,余弦计算的好处是,正好是一个介于0到1的数,如果向量一致就是1,如果正交就是0,符合相似度百分比的特性,余弦的计算方法为,向量内积/各个向量的模的乘积.2)内积计算,直接计算内积,计算强度低,但是误差大。向量空间模型 (或词组向量模型) 是一个应用于信息过滤,信息撷取,索引 以及评估相关性的代数模型。SMART是首个使用这个模型的信息检索系统。文件(语料)被视为索引词(关键词)形成的多次元向量空间, 索引词的集合通常为文件中至少出现过一次的词组。搜寻时,输入的检索词也被转换成类似于文件的向量,这个模型假设,文件和搜寻词的相关程度,可以经由比较每个文件(向量)和检索词(向量)的夹角偏差程度而得知。实际上,计算夹角向量之间的余弦比直接计算夹角容易:余弦为零表示检索词向量垂直于文件向量,即没有符合,也就是说该文件不含此检索词。通过上述的向量空间模型,文本数据就转换成了计算机可以处理的结构化数据,两个文档之间的相似性问题转变成了两个向量之间的相似性问题。分类算法名称:KNN(K最近邻法)/核心实现代码pythonfrom numpy import *import operatorclass KNN: def createDataset(self): group = array(1.0,1.1,1.0,1.0,0,0,0,0.1) labels = A,A,B,B return group,labels def KnnClassify(self,testX,trainX,labels,K): N,M=trainX.shape #calculate the distance between testX and other training samples difference = tile(testX,(N,1) - trainX # tile for array and repeat for matrix in Python, = repmat in Matlab difference = difference * 2 # take pow(difference,2) distance = difference.sum(1) # take the sum of difference from all dimensions distance = distance * 0.5 sortdiffidx = distance.argsort() # find the k nearest neighbours vote = #create the dictionary for i in range(K): ith_label = labelssortdiffidxi; voteith_label = vote.get(ith_label,0)+1 #get(ith_label,0) : if dictionary vote exist key ith_label, return voteith_label; else return 0 sortedvote = sorted(vote.iteritems(),key = lambda x:x1, reverse = True) # key = lambda x: x1 can be substituted by operator.itemgetter(1) return sortedvote00k = KNN() #create KNN objectgroup,labels = k.createDataset()cls = k.KnnClassify(0,0,group,labels,3)print cls3. 研究并整理两种常用的聚类算法,编程实现其中一种,填写如下表格:聚类算法名称实现原理聚类算法名称:XXX算法/核心实现代码解:聚类算法名称实现原理K-means算法(K均值算法)1. 首先,随机选择K个点做为聚类中心2. 然后,计算其它点到这些聚类中心点的距离,通过对簇中距离平均值的计算,不断改变这些聚类中心的位置,直到这些聚类中心不再变化为止CURE算法采用凝聚聚类,在最开始的时候,每个对象属于独立的簇。然后从最相似的对象进行合并,为了能够处理大数据,CURE采用随机抽样和分割的技术来降低数据的量。CURE采用多个对象代表一个簇,并通过收缩因子来调整簇的形状。消除异常值的影响(分两个阶段完成,刚开始进行最相似对象合并,由于异常值的距离很大,所以其所在的类的结点数量增长很慢,接下来在聚类快要结束的时候,将增长慢的簇当中异常值去掉)。CURE聚类完成后只包含样本的数据,之后还得采取某种策略将非样本的数据加入到聚类中聚类算法名称:K-means算法/核心实现代码import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.JFrame;import javax.swing.JPanel;import java.util.Random;import java.applet.*;class PaintovalPane extends JPanel /*K-Means*/ int K = 5; /K个中心 int N = 50; /N个点 int D = 2; /二维元素 Random rand = new Random(); class Point Point() initial(); void initial() /*初始化为0,600)的随机点,簇编号为-1,无意义*/ for (int i = 0; i D; +i) xi = rand.nextDouble()*600; clusterNum = -1; double x = new doubleD; /坐标 int clusterNum; /簇编号 ; Point p; /数据点 Point centroid; /中心点 Point oldCentroid; /上一次的中心点,用于确定中心点是否不再改变 Color colors; /表示不同簇的颜色值 /*欧式距离*/ double Euclidean(Point p1, Point p2) double dis = 0; for (int i = 0; i D; +i) dis += (p1.xi-p2.xi)*(p1.xi-p2.xi); return Math.sqrt(dis); /*更新中心点*/ void updateCentroid(int clusterNum) for (int i = 0; i D; +i) centroidclusterNum.xi = 0; int clusterSize = 0; for (int i = 0; i N; +i) if (pi.clusterNum = clusterNum) clusterSize+; for (int j = 0; j D; +j) centroidclusterNum.xj += pi.xj; if (clusterSize = 0) return; for (int i = 0; i D; +i) centroidclusterNum.xi /= (double)clusterSize; /*更新中心点的接口函数*/ void updateCentroids() for (int i = 0; i K; +i) updateCentroid(i); /*分配数据点到哪个簇*/ void assignPoint(int x) double minDis = 99999999; int minIndex = 1; for (int i = 0; i K; +i) double curDis = Euclidean(px, centroidi); if (curDis minDis) minDis = curDis; minIndex = i; px.clusterNum = minIndex; /*分配数据点到哪个簇的接口函数*/ void assign() for (int i = 0; i N; +i) assignPoint(i); /*判断2点是否同一个点*/ Boolean samePoint(Point p1, Point p2) if (p1.clusterNum != p2.clusterNum) return false; for (int i = 0; i D; +i) if (p1.xi != p2.xi) return false; return true; /*判断算法是否终止*/ Boolean stop() /*如果每一个中心点都与上一次的中心点相同,则算法终止,否则更新oldCentroid*/ for (int i = 0; i K; +i) if (!samePoint(oldCentroidi, centroidi) for (int j = 0; j K; +j) copy(oldCentroidj,centroidj); return false; return true; /*令p1 = p2*/ void copy(Point p1, Point p2) p1.clusterNum = p2.clusterNum; for (int i = 0; i D; +i) p1.xi = p2.xi; /*初始化*/ void init() /*分配内存*/ p = new PointN; centroid = new PointK; oldCentroid = new PointK; colors = new ColorK; for (int i = 0; i N; +i) pi = new Point(); pi.initial(); for (int i = 0; i K; +i) centroidi = new Point(); oldCentroidi = new Point(); centroidi.initial(); oldCentroidi.initial(); copy(oldCentroidi,centroidi); colorsi = new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255); /*默认构造函数,调用初始化函数*/ PaintovalPane() init(); /*重载绘图函数*/ public void paintComponent(Graphics g) super.paintComponent(g); setBackground(Color.white); /*画数据点(圆形),根据簇编号来确定颜色*/ for (int i = 0; i N; +i) int x = (int)pi.x0, y = (int)pi.x1; if (pi.clusterNum = -1) g.setColor(Color.black); else g.setColor(colorspi.clusterNum); g.fillOval(x, y, 15, 15); /*画中心点(矩形),根据簇编号来确定颜色*/ for (int i = 0; i 500 | input1 input1 | input2 = 0) JOptionPane.showMessageDialog(null, Please input the number between 1-Points); else paint.N = input1; paint.K = input2; paint.init(); paint.repaint(); jButton2.setText(Step); jButton2.setEnabled(true); jButton3.setText(Run); jButton3.setEnabled(true); ); /*Step按钮的监听器*/ jButton2.addActionListener(new ActionLis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装饰押金合同范本
- 意向竞买协议书
- 装修门头协议书
- 赠送汽车协议书
- 自行返程协议书
- 赠送商铺协议书
- 资助捐赠协议书
- 营地运营协议书
- 账清了的协议书
- 蒸汽管路协议书
- 知道智慧树西方文论经典导读满分测试答案
- 医药行业合规培训课件
- 水域事故紧急救援与处置预案
- 新能源汽车工程技术专业教学标准(高等职业教育本科)2025修订
- 四川省成都市2023级高中毕业班摸底测试英语试题(含答案和音频)
- 以歌为翼:中文歌曲在泰国小学汉语课堂的教学效能探究
- 2025-2030中国除湿干燥机行业应用趋势与需求规模预测报告
- 2025广东高考物理试题(大题部分)+评析
- 2025年中国国际货运代理行业市场情况研究及竞争格局分析报告
- 家庭教育概论 课件 第5章 亲子关系:家庭教育的起点与结果
- 500千伏输电线路工程项目管理实施规划
评论
0/150
提交评论