2022年数据挖掘实验三应用Apriori算法挖掘频繁项集宣贯 .pdf
《2022年数据挖掘实验三应用Apriori算法挖掘频繁项集宣贯 .pdf》由会员分享,可在线阅读,更多相关《2022年数据挖掘实验三应用Apriori算法挖掘频繁项集宣贯 .pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验三、应用 Apriori 算法挖掘频繁项集学院 计算机科学与软件学院?实验目的:(1)熟悉 VC+ 编程工具和 Apriori 频繁项集挖掘算法。(2)根据管理层的需求,确定数据挖掘的任务,明确数据挖掘的功能,也就是明确要挖掘什么。(3)由确定的数据挖掘任务,从实验一处理后的结果中,采用切块或切片等联机分析处理技术,选择出挖掘任务相关数据。(4)用 VC+ 编程工具编写 Apriori 算法的程序,对任务相关数据运行 Apriori 算法,挖掘出所有的频繁项集。1.写出实验报告。?实验原理:1 、Apriori 算法 Apriori 使用一种称作逐层搜索的迭代方法,k 项集用于探索( k+
2、1)项集。首先,通过扫描数据库,累计每个项的计数,并收集满足最小支持度的项,找出频繁 1 项集的集合。该集合记作 L 1 。然后, L 1 用于找频繁 2 项集的集合L 2 ,L 2 用于找 L 3 ,如此下去,直到不能再找到频繁 k 项集。找每个 L k 需要一次数据库全扫描。2、提高频繁项集逐层产生的效率 Apriori 性质:频繁项集的所有非空子集也必须是频繁的。三、 实验内容:1、实验内容在给定的数据中提取统一购物篮购买的商品信息,由这些数据构成事务数据库 D,挖掘其中的频繁项集 L。挖掘频繁项集的算法描述如下:Apriori 算法:使用逐层迭代找出频繁项集输入:事务数据库 D;最小支
3、持度阈值。输出: D 中的频繁项集 L。(1) L 1 = find_frequent_1-itemsets(D); / 挖掘频繁 1-项集,比较容易(2) for (k=2;L k-1 ;k+) (3) C k = apriori_gen(L k-1 ,min_sup); / 调用 apriori_gen 方法生成候选频繁k-项集分为两步:合并、减枝(4) for each transaction t D / 扫描事务数据库 D (5) Ct = subset(C k ,t); (6) for each candidate c Ct (7) c.count+; / 统计候选频繁 k-项集的计
4、数(8) (9) L k =c Ck|c.countmin_sup / 满足最小支持度的 k-项集即为频繁 k-项集名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - (10) (11) return L= k L k ; / 合并频繁 k-项集( k0)算法在根据频繁 k-1 项集生成频繁 K 项集过程中要计算频繁 K 项集中每个元素的支持度,并计算 K 项集中每个 k-1 项子集是否在 F k-1 中,上述两条任何一条不满足,
5、则删去这个 K 项集中的元素。2 、实验过程 1、打开试验用数据,读取出同一流水号的商品 ID 并取前 5 位,生成以行为单位生成事务数据集 transitions; 2、ind_frequent_1-itemsets 生成频繁一项集for(each transaction in transitions) for(each item in transaction) oneItemSet;oneItemSet.count+;/ 对 1 项集进行计数 3、apriori-gen (L k-1 ) 候选集产生算法For all itemset p Lk-1 do For all itemset q
6、Lk-1 do If p.item1=q.item1, p.item2=q.item2, ,p.itemk-2=q.itemk-2, p.item k-1 !=q.item k-1 then begin c=pq/p 、q 合并后任意的 L k-1 子集if has_infrequent_subset(c, L k-1 ) then delete c / 存在 c 不属于 L k-1 剪枝else add c to Ck End Return Ck 4、has_infrequent_subset(c, L k-1 )判断候选集的元素For all (k-1)-subsets of c do I
7、f Not(S Lk-1) THEN return TRUE; Return FALSE; 1.流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - - - - - - - - 4、主要程序代码1、/ 产生事务数据库代码(加注释)#include #include #include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 1
8、4 页 - - - - - - - - - #include using namespace std; class Sales_n public: string serial; int market; char date10; int sn; int id; float num; float price; ; int main() /打开并创建txt 文件/ char name150,name250; ifstream infile; cout选择要打开的文件:1019n.txt 1020n.txt 1021n.txtname1; infile.open(name1,ios:in); /*st
9、ring contents;*/ if(infile.fail() cout error open! endl; cout要保存的文件名:name2; ofstream outfile(name2,ios:out); if(!outfile) coutopen eror! salsal_size.serial salsal_size.market salsal_size.date salsal_size.sn salsal_size.id salsal_size.num salsal_size.price; sal_size+; /取统一流水的商品ID 前三位按升序无重复的保存起来/ new1
10、00=sal0.id/10000; for (int i =1;isal_size;i+) if (sali.serial=sali-1.serial) new1mn=sali.id/10000; /流水号相同n+; /outfilesali.id/100t; else /排序/ for(int k = 0;kn;k+) for(int j = 0;j new1mj+1) int t = new1mj; new1mj = new1mj+1; new1mj+1 = t; for(int l= 0;l n;l+) if(new1ml-1!=new1ml) outfilenew1mlt; outfi
11、leendl; m+; n = 0; new1mn=sali.id/10000; n+; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 14 页 - - - - - - - - - infile.close();/ 关闭文件 outfile.close();/ 关闭文件system( PAUSE ); 2、/Apriori 算法挖掘频繁项集support = 2(加注释)#include #include #include #include #include #incl
12、ude #include #include #include using namespace std; const int minsup=2; / 设置最小支持度map items_count; / 统计各个项集的数目vector mergeItem(vector vect1,vector vect2,int round); /合并生成新的候选项集int isExist(vector item,vectorvector items); / 判断项集 item 是否已经存在候选项集集合items 中,存在则返回vector mergeItem(vector vect1,vector vect2,
13、int round) /判断两个项集是否可以合并(要求只有一项不同)成一个新的项集(做为候选集) /剪枝工作 / int count=0; / 统计两个 vector 中相同的项的数目 vector vect; map tempMap; / 辅助判断两个vector 中重复的项 for(vector:size_type st=0;stvect1.size();st+) tempMapvect1st+; vect.push_back(vect1st); for(int st=0;stvect2.size();st+) tempMapvect2st+; if(tempMapvect2st=2) /
14、 表示这两项相同 count+; else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 14 页 - - - - - - - - - vect.push_back(vect2st); if(count+1)!=round) / 要求两个项目集只有一个项目不相同,其他都相同 vect.clear(); return vect; int isExist(vector item,vectorvector items) / 判断项集 item 是否已经存在候选项集集合item
15、s 中,存在则返回 int count; / 统计相同的项的数目 if(!items.empty() for(vectorvector :size_type ix=0;ix!=items.size();ix+) count=0; for(vector:size_type iy=0;iy!=itemsix.size();iy+) for(vector:size_type iz=0;iz!=item.size();iz+) if(itemiz=itemsix.at(iy) count+; if(count=item.size() /表示存在 return 1; return 0; int main
16、() vectorvector datavec; /原始数据项集 vectorvector candidatevec; / 候选项集 vectorvector frequentvec; / 频繁项集 vectormap bitmap; / 判断某个项目在某一个事务中是否存在,存在则值为 1,反之为 0 long trancount=0; / 原始事务总数 char name150; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 14 页 - - - - - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据挖掘实验三应用Apriori算法挖掘频繁项集宣贯 2022 数据 挖掘 实验 应用 Apriori 算法 频繁 项集宣贯
限制150内