关联规则挖掘Apriori算法的实现

本文详细介绍了使用Apriori算法进行关联规则挖掘的实验过程,包括根据给定数据库生成频繁项目集及关联规则的Java代码实现,以及使用Weka工具对天气、投票和超市购物篮数据进行挖掘分析,揭示了数据中的购买行为模式。
摘要由CSDN通过智能技术生成

实验名称

关联规则挖掘Apriori算法的实现

实验目的

1.掌握频繁项目集的生成原理

2.掌握关联规则挖掘的原理

3.掌握在weka中进行关联规则挖掘的具体流程。

实验内容

1.根据给定的事务数据库,支持数阈值2和置信度阈值0.7,编写代码生成频繁项目集及对应的关联规则。

2.利用weka工具对天气数据、美国国会议员投票信息、超市购物篮数据进行关联规则挖掘,并分析挖掘结果

实验步骤及结果

一.根据给定的事务数据库,支持数阈值2和置信度阈值0.7,编写代码生成频繁项目集及对应的关联规则。

新建java项目 Apriori.java

1.事务数据库、支持数、置信度的定义

package rule;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Apriori {
	private final static int SUPPORT = 2;
	private final static String ITEM_SPLIT = ";";
	private final static String CON = "->";
	private final static double CONFIDENCE = 0.7;
	private final static List<String> transList = new ArrayList<String>();
	static {
		transList.add("1;2;5;");
		transList.add("2;4;");
		transList.add("2;3;");
		transList.add("1;2;4;");
		transList.add("1;3;");
		transList.add("2;3;");
		transList.add("1;3;");
		transList.add("1;2;3;5;");
		transList.add("1;2;3;");
	}

复制代码

2.频繁项目集的生成过程,其中调用了方法getItem1FC( ),生成L1,递归调用getCandidateCollection()进行连接、剪枝生成C2、C3……,最后生成L2,L3……

// 生成频繁项目集
	public Map<String, Integer> getFC() {
		// 声明哈希表,用来存放键值对,即项目和支持数对,所有的频繁集
		Map<String, Integer> frequentCollectionMap = new HashMap<String, Integer>();
		frequentCollectionMap.putAll(getItem1FC());
		Map<String, Integer> itemkFcMap = new HashMap<String, Integer>();
		itemkFcMap.putAll(getItem1FC());
		while (itemkFcMap != null && itemkFcMap.size() != 0) {
			Map<String, Integer> candidateCollection = getCandidateCollection(itemkFcMap);
			Set<String> ccKeySet = candidateCollection.keySet();

			// 对候选集项进行累加计数
			for (String trans : transList) {
				for (String candidate : ccKeySet) {
					boolean flag = true;// 用来判断交易中是否出现该候选项
					String[] candidateItems = candidate.split(ITEM_SPLIT);
					for (String candidateItem : candidateItems) {
						if (trans.indexOf(candidateItem + ITEM_SPLIT) == -1) {
							flag = false;
							break;
						}
					}
					if (flag) {
						Integer count = candidateCollection.get(candidate);
						candidateCollection.put(candidate, count + 1);
					}
				}
			}

			// 从候选集中找到符合支持度的频繁集项
			itemkFcMap.clear();
			for (String candidate : ccKeySet) {
				Integer count = candidateCollection.get(candidate);
				if (count >= SUPPORT) {
					itemkFcMap.put(candidate, count);
				}
			}
			frequentCollectionMap.putAll(itemkFcMap);
		}
		return frequentCollectionMap;
	}
复制代码

3.根据Lk 进行连接、剪枝生成Ck+1(剪枝指对连接生成的c,判断它的k-子集是否属于Lk,不属于则剪枝去掉该c)

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值