关联规则挖掘Apriori算法的实现,金九银十Java热点知识

if (itemkFcMap.get(subC) == null) {

hasInfrequentSubSet = true;

break;

}

}

} else {

hasInfrequentSubSet = true;

}

if (!hasInfrequentSubSet) {

candidateCollection.put(c, 0);

}

}

}

return candidateCollection;

}

复制代码

4.L1的生成过程

private Map<String, Integer> getItem1FC() {

Map<String, Integer> sItem1FcMap = new HashMap<String, Integer>();// 存放候选1项集

Map<String, Integer> rItem1FcMap = new HashMap<String, Integer>();// 存放频繁1项集

for (String trans : transList) {

String[] items = trans.split(ITEM_SPLIT);

for (String item : items) {

Integer count = sItem1FcMap.get(item + ITEM_SPLIT);

if (count == null) {

sItem1FcMap.put(item + ITEM_SPLIT, 1);

} else {

sItem1FcMap.put(item + ITEM_SPLIT, count + 1);

}

}

}

Set keySet = sItem1FcMap.keySet();

for (String key : keySet) {

Integer count = sItem1FcMap.get(key);

if (count >= SUPPORT) {

rItem1FcMap.put(key, count);

}

}

return rItem1FcMap;

}

复制代码

5. 生成关联规则的过程

public Map<String, Double> getRelationRules(Map<String, Integer> frequentCollectionMap) {

Map<String, Double> relationRules = new HashMap<String, Double>();

Set keySet = frequentCollectionMap.keySet();

for (String key : keySet) {

double countAll = frequentCollectionMap.get(key);

String[] keyItems = key.split(ITEM_SPLIT);

if (keyItems.length > 1) {

List source = new ArrayList();

Collections.addAll(source, keyItems);

List<List> result = new ArrayList<List>();

buildSubSet(source, result);// 获得source的所有非空子集

for (List itemList : result) {

if (itemList.size() < source.size()) {// 只处理真子集

List otherList = new ArrayList();

for (String sourceItem : source) {

if (!itemList.contains(sourceItem)) {

otherList.add(sourceItem);

}

}

String reasonStr = “”;// 前置

String resultStr = “”;// 结果

for (String item : itemList) {

reasonStr = reasonStr + item + ITEM_SPLIT;

}

for (String item : otherList) {

resultStr = resultStr + item + ITEM_SPLIT;

}

double countReason = frequentCollectionMap.get(reasonStr);

double itemConfidence = countAll / countReason;// 计算置信度

if (itemConfidence >= CONFIDENCE) {

String rule = reasonStr + CON + resultStr;

relationRules.put(rule, itemConfidence);

}

}

}

}

}

return relationRules;

}

复制代码

6.对频繁项目集的所有子集生成关联规则

private void buildSubSet(List sourceSet, List<List> result) {

// 仅有一个元素时,递归终止。此时非空子集仅为其自身,所以直接添加到result中

if (sourceSet.size() == 1) {

List set = new ArrayList();

set.add(sourceSet.get(0));

result.add(set);

} else if (sourceSet.size() > 1) {

// 当有n个元素时,递归求出前n-1个子集,在于result中

buildSubSet(sourceSet.subList(0, sourceSet.size() - 1), result);

int size = result.size();// 求出此时result的长度,用于后面的追加第n个元素时计数

// 把第n个元素加入到集合中

List single = new ArrayList();

single.add(sourceSet.get(sourceSet.size() - 1));

result.add(single);

// 在保留前面的n-1子集的情况下,把第n个元素分别加到前n个子集中,并把新的集加入到result中;

// 为保留原有n-1的子集,所以需要先对其进行复制

List clone;

for (int i = 0; i < size; i++) {

clone = new ArrayList();

for (String str : result.get(i)) {

clone.add(str);

clone.add(sourceSet.get(sourceSet.size() - 1));

result.add(clone);

}

}

}

}

复制代码

7.主函数,调用getFC()输出频繁项目集,调用getCandidateCollection()生成存在强关联规则的项目

public static void main(String[] args) {

Apriori apriori = new Apriori();

Map<String, Integer> frequentCollectionMap = apriori.getFC();

System.out.println(“--------------频繁项目集”+“--------------”);

Set fcKeySet = frequentCollectionMap.keySet();

for (String fcKey:fcKeySet){

System.out.println(fcKey+" : "+frequentCollectionMap.get(fcKey));

}

Map<String, Double> relationRulesMap = apriori.getRelationRules(frequentCollectionMap);

System.out.println(“--------------存在强关联规则如下”+“--------------”);

Set rrKeySet=relationRulesMap.keySet();

for(String rrKey:rrKeySet){

System.out.println(rrKey+" : "+relationRulesMap.get(rrKey));

}

}

}

复制代码

运行结果:

image.png

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

<1>

image.png

image.png

选择Apriori

image.png

设置好各项参数

image.png

image.png

设置完成后点击start运行

image.png

image.png

Run information  //实验运行信息

Scheme: weka.associations.Apriori   //所选的关联规则挖掘方案:Apriori算法

-N 10 -T 0 -C 0.9 -D 0.05 -U 1.0 -M 0. 1 -S -1.0 -c -1

//各参数依次表示:

I - 输出项集,若设为false则该值缺省;

N 10 - 规则数为10;

T 0 – 度量单位选为置信度,(T1-提升度,T2杠杆率,T3确信度);

C 0.9 – 度量的最小值为0.9;

D 0.05 - 递减迭代值为0.05;

U 1.0 - 最小支持度上界为1.0;

M 0.1 - 最小支持度下届设为0.1;

S -1.0 - 重要程度为-1.0;

c -1 - 类索引为-1输出项集设为真

Relation:weather.symbolic //数据的名称weather.symbolic

Instances: 14  //数据的记录数 14

Attributes:5 //属性数目 5以及各属性名称

Apriori  // Apriori算法运行结果

Minimum support: 0. 1 5 (2 instances)   //最小支持度0.15,即最少需要2个实例

Minimum metric : 0.9   //最小度量<置信度>: 0.9

Number of cycles performed: 1 7 //进行了17轮搜索

Generated sets of large itemsets:     //生成的频繁项集

Size of set of large itemsets L(1): 12 //频繁1项集:12个

Size of set of large itemsets L( 2 ): 47 //频繁2项集:47个

Size of set of large itemsets L( 3 ): 39 //频繁3项集:39个

Size of set of large itemsets L( 4 ): 6  //频繁4项集:6个

Best rules found: //最佳关联规则

1. outlook=overcast 4 ==> play=yes 4    conf:(1)") lift:(1.56) lev:(0.1) [1] conv:(1.43)

//规则采用“前件 num.1 ==>结论 num.2”的形式表示,前件后面的数字表示有多少个实例满足前件,结论后的数字表示有多少个实例满足整个规则,这就是规则的”支持度“。

conf:置信度 lift:提升度 lev:杠杠率 conv:确信度

设置参数 outputItemSets 为 true,再次运行 Apriori 算法,会生成各频繁项目集及他们的支

持数如下:

image.png

<2>加载 vote.arff 数据集,该数据集中各属性含义如下:

image.png

切换至 Associate 标签页,选择 Apriori 算法,保持默认选项,单击 start 按钮,

结果如下:

image.png

参数解释如<1>一致

<3>加载 supermarket.arff 数据集

image.png

运行 Apriori 算法,结果如下:

image.png

解析如下:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

总结

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。

为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的

并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

66个Java面试知识点

架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

算法刷题(PDF)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-drUCouMR-1712062830110)]

总结

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。

为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的

并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)

[外链图片转存中…(img-IDLr8aUz-1712062830111)]

66个Java面试知识点

架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)

[外链图片转存中…(img-9eBAHW5H-1712062830111)]

算法刷题(PDF)

[外链图片转存中…(img-oSpDMrnQ-1712062830111)]

  • 21
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值