- 2
- 0
- 约5.97千字
- 约 16页
- 2021-03-25 发布于山东
- 举报
实验报告
实验课程名称: 数据挖掘
实验项目名称: Apriori 算法
理 学 院
实验时间: 2014年 11月11 日
学生所在学院:理学院
专业: 统计学
班级:
姓 名
学 号
实验组
实验时间
指导教师
成 绩
实验项目名称
Apriori
算法
实验目的及要求:
1.加强对 Apriori 算法的理解
2.锻炼分析问题、解决问题以及动手能力
3.编程实现 Apriori 算法
实验(或算法)原理:
Apriori 算法是一种找频繁项目集的基本算法。其基本原理是逐层搜索的迭代:频繁 K
项 Lk 集用于搜索频繁 (K+1)项集 Lk+1,如此下去,直到不能找到维度更高的频繁项集为止。这种方法依赖连接和剪枝这两步来实现。
算法的第一次遍历仅仅计算每个项目的具体值的数量, 以确定大型 l 项集。随后的遍历,第 k 次遍历,包括两个阶段。首先,使用在第 (k-1)次遍历中找到的大项集 Lk-1 和用
Aprioir-gen 函数产生候选项集 Ck。接着扫描数据库, 计算 Ck 中候选的支持度。 用 Hash 树可以有效地确定 Ck 中包含在一个给定的事务 t 中的候选。算法如下:
L1 = {大项目集 1 项目集 };
for (k = 2; Lk-1 !=空; k++) do begin
Ck = apriori-gen(Lk-1);
.endl;
map vectorstring,unsigned int empty;
return empty;
}
while(1)
{
map vectorstring,unsigned int K_itemTemp = K_item;
K_item = apri_gen(i++,K_item);
if (K_itemTemp == K_item)
{
i = UINT_MAX;
break;
}
判断是否需要进行下一次的寻找
map vectorstring,unsigned int pre_K_item = K_item;
size_t Kitemsize = ();
// 存储应该删除的第 K 级频繁项集,不能和其他 K 级频繁项集构成第 K+1 级项集的集合
if (Kitemsize != 1 i != 1)
{
vector map vectorstring,unsigned int ::iterator eraseVecMit;
map vectorstring,unsigned int ::iterator pre_K_item_it1 = () , pre_K_item_it2;
while (pre_K_item_it1 != () )
{
map vectorstring,unsigned int ::iterator mit = pre_K_item_it1;
bool isExist = true;
vectorstring vec1;
vec1 = pre_K_item_it1-first;
vectorstring vec11(),()-1);
while (mit != ())
{
vectorstring vec2;
vec2 = mit-first;
vectorstring vec22(),()-1);
if (vec11 == vec22)
break;
++mit;
}
if (mit == ())
isExist = false;
if (!isExist pre_K_item_it1 != ())
(pre_K_item_it1);// 该第 K 级频繁项应该删除
++pre_K_item_it1;
}
size_t eraseSetSize = ();
if (eraseSetSize == Kitemsize)
break;
else
{
vector map vectorstring,unsigned int ::iterator ::iterator currentErs = ();
while (currentErs != ())//
删除所有应该删除的第
K 级频繁项
{
map vectorstring,unsigned int ::iterator eraseMit = *currentErs;
(eraseMit);
++currentErs;
}
}
}
else
if(Kitemsize == 1 )
break;
}
coutendl;
showAprioriItem(i,K_item);
return K_item;
}
map vectorstring,unsigned int Apriori::apri_gen(unsigned int K , ma
原创力文档

文档评论(0)