patterns.clear();
}
}
生成K项候选频繁集:
inline void Apriori::generate_k_candidates(const vector
vector
{
for(int i = 0; i < patterns.size(); ++i)// 遍历过滤后的候选k-1项集, 两两连接
for(int j = i+1; j < patterns.size(); ++j)
if(Items_method::Is_compatible_Items(patterns[i].items_,patterns[j].items_))// 首先判断能否连接
if((double)min(patterns[i].freq_,patterns[j].freq_) / minSupport_ >= minConf_)
{Items items = Items_method::join_Items(patterns[i].items_,patterns[j].items_);// 连接得到k项集, 保存到输出列表
candidates.push_back(ItemsCounter(items,0,0));
}
}
(三)算法评价
通过上述的介绍,可以看到本算法的思路基本上与Apriori算法保持一致,即它们的共同之处是通过扫描数据得到那些支持度不小于用户给定的最小支持度的频繁项集,但是又有不同之处就是在扫描数据库之前就进行了剪枝,在剪枝后再重新连接扫描数据库,减少了扫描的次数。
在算法效率上,通过数据压缩可将挖掘的数据一次性扫描进入内存中,避免了重复磁盘I/O操作,没有压缩的数据不可能一次性读入内存,从而提高了计算效率;另通过数据压缩减少了每一项字符长度,特别是在比较两项是否相同的时候,需比较的字符数就少了很多,可以提高运算速度。通过使用数据压缩的方式,节省了内存,减少了候选集比较的时间,从而生成频繁项集速度将更快,同时加入了同属性列只能出现一次和后件必须相同的约束,使得连接次数大大减少,计算复杂度也降低了。在对图书馆这样的大型数据库而言,这种节省对数据挖掘效率提高的作用就显而易见。
(四)关联规则挖掘结果分析
根据以上关联规则挖掘结果分析,可以看到这种算法改进具有一定的实际意义:
通过研究读者群体的特征和关系,可以按年龄、学历、职业等因素对读者群体进行分类,也可以进行聚类,把读者群体细分,可以更清楚地了解读者的特点和需求;通过以上挖掘出的规则,进一步了解读者的特点,提高图书馆的吸引力,改进读者服务和提高读者的满意度;可以统计出读者的借阅频率、书籍流通趋势和周期,通过更科学地规划馆藏,提高图书的借阅率;通过分类,对重要的读者提供更优质的服务,从而使读者忠诚度更高;提高图书馆管理效率,提高决策水平,改进服务流程,使图书馆的服务流程更合理,最终提高管理效率;提高读者兴趣度,改善采购水平和质量,购进读者需要的书籍;通过科学规划馆藏目录,提高馆藏借阅率。
总之,Apriori算法能有效地进行关联规则的数据挖掘。本文根据图书数据挖掘中最后一项是固定的图书分类的特点,提出的改进Apriori算法,是根据图书馆数据特点进行连接和剪枝,生成频繁项集,进一步缩小了挖掘的范围,提高了数据挖掘的效率,使得到的规则更加科学合理。
参考文献:
1.朱小栋,郑诚等.关联规则的哈希修剪算法研究.安徽大学学报(自然科学版),2005(7)
2.佟强,周园春,阎保平.关联规则挖掘算法.微电子学与计算机,2005(6)