apriori如何实现apriori算法

apriori  时间:2021-06-22  阅读:()

Clementine关联规则Apriori算法事务模式怎么使用

算法: Apriori算法,使用逐层迭代找出频繁项集。

输入:事务数据库D;最小支持度阈值min_sup。

输出:D 中的频繁项集L。

1) L1 = find_frequent_1_itemsets(D); 2) for (k = 2; Lk-1 ≠ ; k++) { 3) Ck = aproiri_gen(Lk-1,min_sup); 4) for each transaction t D{ //scan D for count 5) Ct = subset(Ck,t); //get subsets of t that are candidates 6) for each candidate c Ct 7) c.count++; 8) } 9) Lk={c Ck | c.count ≥ min_sup} 10) } 11) return L = ∪kLk;

问读音:null,Apriori,FP-Growth的读法

汉语标出可真不准确,不方便啊 servlet /s?:vlit/--/se wu li te/ HTML 就是一个一个字母的读,它是hyper text markup language简写 null /n?l/--/na ou/ apriori 英文发音为:/?pri?ri/--/e pe rui ao rui/ FP-Growth 英文发音为:/aif pi: gr?uθ/--/F P-ge rou si/ 前面一个词一般读中文 普瑞奥瑞 后面的一个词 直接读英文

如何实现apriori算法

import?java.util.HashMap; import?java.util.HashSet; import?java.util.Iterator; import?java.util.Map; import?java.util.Set; import?java.util.TreeMap; /** *?<B>关联规则挖掘:Apriori算法</B> *? *?<P>按照Apriori算法的基本思想来实现 *? *?@author?king *?@since?2013/06/27 *? */ public?class?Apriori?{ private?Map<Integer,?Set<String>>?txDatabase;?//?事务数据库 private?Float?minSup;?//?最小支持度 private?Float?minConf;?//?最小置信度 private?Integer?txDatabaseCount;?//?事务数据库中的事务数 private?Map<Integer,?Set<Set<String>>>?freqItemSet;?//?频繁项集集合 private?Map<Set<String>,?Set<Set<String>>>?assiciationRules;?//?频繁关联规则集合 public?Apriori( ????Map<Integer,?Set<String>>?txDatabase,? ????Float?minSup,? ????Float?minConf)?{ ???this.txDatabase?=?txDatabase; ???this.minSup?=?minSup; ???this.minConf?=?minConf; ???this.txDatabaseCount?=?this.txDatabase.size(); ???freqItemSet?=?new?TreeMap<Integer,?Set<Set<String>>>(); ???assiciationRules?=?new?HashMap<Set<String>,?Set<Set<String>>>(); } /** *?扫描事务数据库,计算频繁1-项集 *?@return */ public?Map<Set<String>,?Float>?getFreq1ItemSet()?{ ???Map<Set<String>,?Float>?freq1ItemSetMap?=?new?HashMap<Set<String>,?Float>(); ???Map<Set<String>,?Integer>?candFreq1ItemSet?=?this.getCandFreq1ItemSet(); ???Iterator<Map.Entry<Set<String>,?Integer>>?it?=?candFreq1ItemSet.entrySet().iterator(); ???while(it.hasNext())?{ ????Map.Entry<Set<String>,?Integer>?entry?=?it.next(); ????//?计算支持度 ????Float?supported?=?new?Float(entry.getValue().toString())/new?Float(txDatabaseCount); ????if(supported>=minSup)?{ ?????freq1ItemSetMap.put(entry.getKey(),?supported); ????} ???} ???return?freq1ItemSetMap; } /** *?计算候选频繁1-项集 *?@return */ public?Map<Set<String>,?Integer>?getCandFreq1ItemSet()?{ ???Map<Set<String>,?Integer>?candFreq1ItemSetMap?=?new?HashMap<Set<String>,?Integer>(); ???Iterator<Map.Entry<Integer,?Set<String>>>?it?=?txDatabase.entrySet().iterator(); ???//?统计支持数,生成候选频繁1-项集 ???while(it.hasNext())?{ ????Map.Entry<Integer,?Set<String>>?entry?=?it.next(); ????Set<String>?itemSet?=?entry.getValue(); ????for(String?item?:?itemSet)?{ ?????Set<String>?key?=?new?HashSet<String>(); ?????key.add(item.trim()); ?????if(!candFreq1ItemSetMap.containsKey(key))?{ ??????Integer?value?=?1; ??????candFreq1ItemSetMap.put(key,?value); ?????} ?????else?{ ??????Integer?value?=?1+candFreq1ItemSetMap.get(key); ??????candFreq1ItemSetMap.put(key,?value); ?????} ????} ???} ???return?candFreq1ItemSetMap; } /** *?根据频繁(k-1)-项集计算候选频繁k-项集 *? *?@param?m?其中m=k-1 *?@param?freqMItemSet?频繁(k-1)-项集 *?@return */ public?Set<Set<String>>?aprioriGen(int?m,?Set<Set<String>>?freqMItemSet)?{ ???Set<Set<String>>?candFreqKItemSet?=?new?HashSet<Set<String>>(); ???Iterator<Set<String>>?it?=?freqMItemSet.iterator(); ???Set<String>?originalItemSet?=?null; ???while(it.hasNext())?{ ????originalItemSet?=?it.next(); ????Iterator<Set<String>>?itr?=?this.getIterator(originalItemSet,?freqMItemSet); ????while(itr.hasNext())?{ ?????Set<String>?identicalSet?=?new?HashSet<String>();?//?两个项集相同元素的集合(集合的交运算)???? ?????identicalSet.addAll(originalItemSet);? ?????Set<String>?set?=?itr.next();? ?????identicalSet.retainAll(set);?//?identicalSet中剩下的元素是identicalSet与set集合中公有的元素 ?????if(identicalSet.size()?==?m-1)?{?//?(k-1)-项集中k-2个相同 ??????Set<String>?differentSet?=?new?HashSet<String>();?//?两个项集不同元素的集合(集合的差运算) ??????differentSet.addAll(originalItemSet); ??????differentSet.removeAll(set);?//?因为有k-2个相同,则differentSet中一定剩下一个元素,即differentSet大小为1 ??????differentSet.addAll(set);?//?构造候选k-项集的一个元素(set大小为k-1,differentSet大小为k) ??????if(!this.has_infrequent_subset(differentSet,?freqMItemSet)) ??????????candFreqKItemSet.add(differentSet);?//?加入候选k-项集集合 ?????} ????} ???} ???return?candFreqKItemSet; } /** ?*?使用先验知识,剪枝。

若候选k项集中存在k-1项子集不是频繁k-1项集,则删除该候选k项集 ?*?@param?candKItemSet ?*?@param?freqMItemSet ?*?@return ?*/ private?boolean?has_infrequent_subset(Set<String>?candKItemSet,?Set<Set<String>>?freqMItemSet)?{ Set<String>?tempSet?=?new?HashSet<String>(); tempSet.addAll(candKItemSet); Iterator<String>?itItem?=?candKItemSet.iterator(); while(itItem.hasNext())?{ String?item?=?itItem.next(); tempSet.remove(item);//?该候选去掉一项后变为k-1项集 if(!freqMItemSet.contains(tempSet))//?判断k-1项集是否是频繁项集 return?true; tempSet.add(item);//?恢复 } return?false; } /** *?根据一个频繁k-项集的元素(集合),获取到频繁k-项集的从该元素开始的迭代器实例 *?@param?itemSet *?@param?freqKItemSet?频繁k-项集 *?@return */ private?Iterator<Set<String>>?getIterator(Set<String>?itemSet,?Set<Set<String>>?freqKItemSet)?{ ???Iterator<Set<String>>?it?=?freqKItemSet.iterator(); ???while(it.hasNext())?{ ????if(itemSet.equals(it.next()))?{ ?????break; ????} ???} ???return?it; } /** *?根据频繁(k-1)-项集,调用aprioriGen方法,计算频繁k-项集 *? *?@param?k? *?@param?freqMItemSet?频繁(k-1)-项集 *?@return */ public?Map<Set<String>,?Float>?getFreqKItemSet(int?k,?Set<Set<String>>?freqMItemSet)?{ ???Map<Set<String>,?Integer>?candFreqKItemSetMap?=?new?HashMap<Set<String>,?Integer>(); ???//?调用aprioriGen方法,得到候选频繁k-项集 ???Set<Set<String>>?candFreqKItemSet?=?this.aprioriGen(k-1,?freqMItemSet); ???//?扫描事务数据库 ???Iterator<Map.Entry<Integer,?Set<String>>>?it?=?txDatabase.entrySet().iterator(); ???//?统计支持数 ???while(it.hasNext())?{ ????Map.Entry<Integer,?Set<String>>?entry?=?it.next(); ????Iterator<Set<String>>?kit?=?candFreqKItemSet.iterator(); ????while(kit.hasNext())?{ ?????Set<String>?kSet?=?kit.next(); ?????Set<String>?set?=?new?HashSet<String>(); ?????set.addAll(kSet); ?????set.removeAll(entry.getValue());?//?候选频繁k-项集与事务数据库中元素做差运算 ?????if(set.isEmpty())?{?//?如果拷贝set为空,支持数加1 ??????if(candFreqKItemSetMap.get(kSet)?==?null)?{ ???????Integer?value?=?1; ???????candFreqKItemSetMap.put(kSet,?value); ??????} ??????else?{ ???????Integer?value?=?1+candFreqKItemSetMap.get(kSet); ???????candFreqKItemSetMap.put(kSet,?value); ??????} ?????} ????} ???}

享有云:美国BGP云服务器低至20元/月起,首月打折;香港2核2G2M仅50元/月起

享有云怎么样?享有云是一家新的国内云服务器商家,目前提供国内、香港及海外地区的云服务器,拥有多线路如:BGP线路、CN2线路、高防等云服务器,并且提供稳定、安全、弹性、高性能的云端计算服务,实时满足您的多样性业务需求。目前,美国bgp云服务器,5M带宽,低至20元/月起,270元/年起,首月打折;香港2核2G2M仅50元/月起,450元/年起!点击进入:享有云官方网站地址享有云优惠活动:一、美国B...

古德云香港cn2/美国cn235元/月起, gia云服务器,2核2G,40G系统盘+50G数据盘

古德云(goodkvm)怎么样?古德云是一家成立于2020年的商家,原名(锤子云),古德云主要出售VPS服务器、独立服务器。古德云主打产品是香港cn2弹性云及美西cn2云服务器,采用的是kvm虚拟化构架,硬盘Raid10。目前,古德云香港沙田cn2机房及美国五星级机房云服务器,2核2G,40G系统盘+50G数据盘,仅35元/月起,性价比较高,可以入手!点击进入:古德云goodkvm官方网站地址古德...

lcloud零云:沪港IPLC,70元/月/200Mbps端口/共享IPv4/KVM;成都/德阳/雅安独立服务器低至400元/月起

lcloud怎么样?lcloud零云,UOVZ新开的子站,现在沪港iplc KVM VPS有端午节优惠,年付双倍流量,200Mbps带宽,性价比高。100Mbps带宽,500GB月流量,10个,512MB内存,优惠后月付70元,年付700元。另有国内独立服务器租用,泉州、佛山、成都、德阳、雅安独立服务器低至400元/月起!点击进入:lcloud官方网站地址lcloud零云优惠码:优惠码:bMVbR...

apriori为你推荐
视频托管我想做一些游戏教学视频,放到网上收费该可以吗?webservice框架WebService新手,请教WebService需要什么包gas是什么意思GC什么意思网站客服代码请问怎么在网页里面加入在线客服系统的代码,代码要怎么获得?erp系统教程如何使用ERP系统操作?微盟价格为什么这么多人用微盟,微盟都有哪些优势西安娱乐西安那里有好玩的地方,夜生活不去在线操作系统什么是计算机操作系统?其作用主要有哪些邮政网关如何注销中国邮政支付网关网上账号flv转avi为什么将flv格式转换成avi格式就不太清楚啦
阿里云os themeforest sugarsync 免费个人博客 最好看的qq空间 刀片服务器是什么 789电视网 中国电信测网速 爱奇艺vip免费试用7天 万网空间购买 如何建立邮箱 1元域名 smtp虚拟服务器 便宜空间 腾讯数据库 国外免费网盘 wordpress空间 贵州电信 亿库 cpu使用率过高怎么办 更多