数据挖掘—Apriori算法(Java实现)

算法描述

(1)扫描全部数据,产生候选1-项集的集合C1;
(2)根据最小支持度,由候选1-项集的集合C1产生频繁1-项集的集合L1;
(3)对k>1,重复执行步骤(4)、(5)、(6);
(4)由Lk执行连接和剪枝操作,产生候选(k+l)-项集的集合Ck+1;
(5)根据最小支持度,由候选(k+l)-项集的集合Ck+1,产生频繁(k+1)-项集的集合Lk+1;
(6)若L≠Φ,则k=k+1,跳往步骤(4);否则,跳往步骤(7);
(7)根据最小置信度,由频繁项集产生强关联规则,结束。
在这里插入图片描述

代码

public class Apriori2
{
   
    private final static int SUPPORT = 8; // 支持度阈值
    private final static double CONFIDENCE = 0.6; // 置信度阈值
    private final static String ITEM_SPLIT = " "; // 项之间的分隔符
    private final static String CON = "->"; // 项之间的分隔符

    /**
     * 算法主程序
     * @param dataList
     * @return Map<String, Integer>
     */
    public Map<String, Integer> apriori(ArrayList<String> dataList)
    {
   
        Map<String, Integer> stepFrequentSetMap = new HashMap<>(findFrequentOneSets(dataList));//找出候选

        // 1-项集

        //频繁项集
        Map<String, Integer> frequentSetMap = new HashMap<String, Integer>(stepFrequentSetMap);

        while(stepFrequentSetMap.size() > 0)//上一步的频繁项集不为空
        {
   
            Map<String, Integer> candidateSetMap = aprioriGen(stepFrequentSetMap);//生成候选集

            Set<String> candidateKeySet = candidateSetMap.keySet();

            //扫描D,进行计数,计算候选集的支持度计数
            for(String data:dataList)
            {
   
                for(String candidate:candidateKeySet)
                {
   
                    boolean flag = true;
                    String[] strings = candidate.split(ITEM_SPLIT);
                    for(String string:strings)
                    {
   
                        if(!data.contains(string + ITEM_SPLIT))//找不出候选项集中的元素,退出
                        {
   
                            flag = false;
                            break;
                        }
                    }
                    if(flag)
                        candidateSetMap.put(candidate, candidateSetMap.get(candidate)+1);//支持度加一
                }
            }

            //从候选集中找到符合支持度的频繁项集
            stepFrequentSetMap.clear();
            for(String candidate:candidateKeySet)
            {
   
                Integer count = candidateSetMap.get(candidate);
                if(count>=SUPPORT)
                    stepFrequentSetMap.put(candidate
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值