强关联规则挖掘

article/2025/9/6 23:24:05

挖掘强关联规则的过程:

1.得到最大频繁项目集(这里使用apriori算法)

2.在最大频繁项目集中找强关联规则

工程结构:

(把下面的文件放到自己建的工程中就可以运行了,如果嫌麻烦的话把这些都放到main.cpp中也可以,建议分开放。但是要注意代码中有一个地方用到了自动数据类型auto,要开c++11,否则编译会报错,如果没开的话按照代码注释改一下就可以了。)

codeblock中开c++11:

settings->compiler:

运行结果:

含的文件:

(代码中都有注释,很容易看懂的)

mian.cpp

#include "mining.h"
int main()
{//freopen("in.txt","r",stdin);PSet D;  //int min_support,num;cout<<"输入最小支持度和事务个数:"<<endl;cin>>min_support>>num;cout<<"输入所有事务"<<endl;for(int i=0;i<num;i++){ItemSet tem;cin>>tem.items;tem.cnt=1;D.push_back(tem);}//得到频繁项目集PSet result=apriori(D,min_support);cout<<endl<<"所有的频繁项目集:"<<endl<<'{';for(int i=0;i<result.size();i++)i==result.size()-1?cout<<result[i].items<<'}'<<endl:cout<<result[i].items<<',';//得到最大频繁项目集result=get_max(result);cout<<endl<<"最大频繁项目集:"<<endl<<'{';for(int i=0;i<result.size();i++)i==result.size()-1?cout<<result[i].items<<'}'<<endl:cout<<result[i].items<<',';cout<<endl;double min_conf;cout<<"输入最小置信度:";cin>>min_conf;//找强关联规则RuleSet rules=find_rules(D,result,min_conf);cout<<endl<<"满足条件的所有强关联规则(后面两个分别是置信度和支持度):"<<endl;for(int i=0;i<rules.size();i++)cout<<rules[i].f<<"->"<<rules[i].t<<"   "<<rules[i].conf<<"  "<<rules[i].support<<endl;return 0;
}

 

 

mining.h

#include "base.h"
#include "apriori.h"
#include "gen.h"

 

 

base.h

#include <bits/stdc++.h>
using namespace std;//项集的数据结构
struct ItemSet
{string items;int cnt;bool operator <(ItemSet t)const{if(items==t.items)return cnt<t.cnt;return items<t.items;}bool operator ==(ItemSet t)const{return items==t.items&&cnt==t.cnt;}
};//规则的数据结构
struct Rule
{string f,t;double support,conf;bool operator ==(Rule x)const{return f==x.f&&t==x.t&&support;}bool operator <(Rule x)const{if(f==x.f)return t<x.t;else return f<x.f;}
};//项目集的数据类型
typedef vector<ItemSet> PSet;//规则集合
typedef vector<Rule> RuleSet;//判断a中有多少个项目不属于b,显然当返回值是0的时候a是b的自子集
//gen.h和apriori.h中都会用到
int belong(string a,string b)
{int ct=0;for(int i=0;i<a.length();i++)if(b.find_first_of(a[i])==string::npos)ct++;return ct;
}

 

 

apriori.h

//apriori算法初始时用到,获得L1
PSet get(PSet &D)
{set<char> se;PSet ans;for(int i=0;i<D.size();i++){for(int j=0;j<D[i].items.length();j++)se.insert(D[i].items[j]);}auto it=se.begin();//如果没有开c++11标准的话,把auto改为set<char>::iteratorwhile(it!=se.end()){ItemSet tem;tem.cnt=0;tem.items.push_back(*it);ans.push_back(tem);it++;}return ans;
}//将b加到a中,用于将apriori中产生的Li加入到最后的结果中
void con(PSet &a,PSet &b)
{for(int i=0;i<b.size();i++)a.push_back(b[i]);
}//生成候选集时用到,根据a和b生成一个候选项集
string gen(string a,string b)
{sort(a.begin(),a.end());sort(b.begin(),b.end());for(int i=0;i<a.length();i++){if(b.find_first_of(a[i])==string::npos){b.push_back(a[i]);sort(b.begin(),b.end());return b;}}
}//get_candidates中会用到的函数,判断items是否包含非频繁项目集
bool contain_inf(PSet &Li,string items)
{for(int i=0;i<items.length();i++){string tem=items;tem.erase(tem.begin()+i);bool flag=false;for(int j=0;j<Li.size();j++){if(!belong(tem,Li[j].items)){flag=true;break;}}if(!flag)return 1;}return 0;
}//在频繁项目集中求最大频繁项目集
PSet get_max(PSet &L)
{PSet ans;for(int i=0;i<L.size();i++){bool flag=false;for(int j=0;j<L.size();j++)if(i!=j&&!belong(L[i].items,L[j].items)){flag=true;break;}if(!flag)ans.push_back(L[i]);}return ans;
}//apriori算法要用到的函数,根据Li(每个项集都是k项)生成候选项目集Ci(每个项集都是k+1项)
PSet get_candidates(PSet &Li)
{PSet Ci;for(int i=0;i<Li.size();i++){for(int j=i+1;j<Li.size();j++){if(i!=j&&belong(Li[i].items,Li[j].items)==1){ItemSet tem;tem.cnt=0;tem.items=gen(Li[i].items,Li[j].items);if(!contain_inf(Li,tem.items))Ci.push_back(tem);}}}sort(Ci.begin(),Ci.end());Ci.erase(unique(Ci.begin(),Ci.end()),Ci.end());return Ci;
}//apriori算法主体,求频繁项目集
PSet apriori(PSet &D,int min_support)
{PSet Ci,Li,L;Li=get(D);while(true){con(L,Li);Ci=get_candidates(Li);for(int i=0;i<Ci.size();i++){for(int j=0;j<D.size();j++)if(!belong(Ci[i].items,D[j].items))Ci[i].cnt++;}Li.clear();for(int i=0;i<Ci.size();i++)if(Ci[i].cnt>=min_support)Li.push_back(Ci[i]);if(Li.size()==0)break;}return L;
}

 

 

gen.h

//求差集b-a
string inter(string a,string b)
{int pos;for(int i=0;i<a.length();i++){pos=b.find_first_of(a[i]);if(pos!=string::npos)b.erase(b.begin()+pos);}return b;
}//将b中的规则加到a中
void con_rule(RuleSet &a,RuleSet &b)
{for(int i=0;i<b.size();i++)a.push_back(b[i]);
}//求a的支持数(这里只能说是支持度,因为并没有除总事务的个数)
double support(PSet &D,ItemSet a)
{double conf=0;for(int i=0;i<D.size();i++)if(!belong(a.items,D[i].items))conf++;return conf;
}RuleSet gen_rules(PSet &D,ItemSet Li,ItemSet Lm,double min_conf)
{double conf;RuleSet rules;for(int i=0;i<Lm.items.length();i++){ItemSet tem=Lm;tem.items.erase(tem.items.begin()+i);conf=(double)Li.cnt/support(D,tem);if(conf>min_conf){Rule rule;rule.f=tem.items;rule.t=inter(tem.items,Li.items);rule.conf=conf;rules.push_back(rule);}if(tem.items.length()>1){RuleSet rules2=gen_rules(D,Li,tem,min_conf);con_rule(rules,rules2);}}sort(rules.begin(),rules.end());rules.erase(unique(rules.begin(),rules.end()),rules.end());return rules;
}RuleSet find_rules(PSet &D,PSet &L,double min_conf)
{RuleSet rules;for(int i=0;i<L.size();i++){RuleSet tem=gen_rules(D,L[i],L[i],min_conf);con_rule(rules,tem);}sort(rules.begin(),rules.end());rules.erase(unique(rules.begin(),rules.end()),rules.end());return rules;
}

 


http://chatgpt.dhexx.cn/article/AYswC6jy.shtml

相关文章

关联规则 置信度与支持度以及Apriori算法简介

关联规则&#xff1a;购物篮分析&#xff0c;最早的出现是为了发现超市销售数据库中不同商品之间的关联关系。 文章目录 1.案例引入&#xff08;1&#xff09;啤酒与尿布的故事&#xff08;2&#xff09;购物篮例子 2.关联分析问题定义2.1二元表示2.2项集和支持度计数2.3 关联规…

关联规则挖掘_基于人工智能的网络告警关联分析处理的应用

1 概述 随着通信网络近些年的快速发展,其规模已经相当庞大,在网络中每天都会产生告警信息,并且这些信息数据量庞大、突发故障多,当网络设备出现故障并引发告警时,与它关联的设备也会引发相应的故障,并在短时间内产生大量告警信息[1-2]。由于一个故障的产生往往会引发多…

关联规则常用算法

关联规则&#xff08;Association Rules&#xff09;是海量数据挖掘&#xff08;Mining Massive Datasets&#xff0c;MMDs&#xff09;非常经典的任务&#xff0c;其主要目标是试图从一系列事务集中挖掘出频繁项以及对应的关联规则。关联规则来自于一个家喻户晓的“啤酒与尿布…

关联规则挖掘算法

关联规则挖掘是一种基于规则的机器学习算法&#xff0c;该算法可以在大数据库中发现感兴趣的关系。它的目的是利用一些度量指标来分辨数据库中存在的强规则。也即是说关联规则挖掘是用于知识发现&#xff0c;而非预测&#xff0c;所以是属于无监督的机器学习方法。 “尿布与啤酒…

Python实现关联规则推荐

1.什么关联规则 关联规则&#xff08;Association Rules&#xff09;是反映一个事物与其他事物之间的相互依存性和关联性&#xff0c;如果两个或多个事物之间存在一定的关联关系&#xff0c;那么&#xff0c;其中一个事物就能通过其他事物预测到。关联规则是数据挖掘的…

关联规则

何为关联规则&#xff0c;关联规则是发现事物之间关联关系的分析过程&#xff0c;其典型的例子就是购物篮分析。购物篮分析就是确定顾客在一次购物过程中一起购买的商品&#xff0c;通过分析发现不同商品之间的购买习惯&#xff0c;发现顾客购买的行为习惯&#xff0c;从而发现…

python 关联规则

文章目录 一、基本概念定义1. 记录&#xff08;事务&#xff09;定义2. 事务集定义3. 项目&#xff08;项&#xff09;定义4. 项目集&#xff08;项集&#xff09;定义5. k项集定义6. 支持度&#xff08;Support&#xff09;定义7. 置信度&#xff08;Confidence&#xff09;定…

关联规则分析

文章目录 一、经典案例二、相关概念由k个项构成的集合X>Y含义事务仅包含其涉及到的项目&#xff0c;而不包含项目的具体信息支持度 (support)置信度 (confidence)提升度 (lift) 三、实验分析自制数据集电影数据集题材 一、经典案例 在美国&#xff0c;一些年轻的父亲下班后…

关联规则(Association Rules)笔记

1 关联规则产生的原因&#xff1a;购物篮问题 关联规则最初是为了解决购物篮问题而产生。上世纪九十年代&#xff0c;美国的沃尔玛超市发现&#xff0c;啤酒和尿布这两种完全不着边际的商品竟然有很高的概率一起被购买。 在一段时间之后&#xff0c;他终于分析出了原因&#xf…

关联规则(Apriori、FP-grpwth)

什么是关联规则 关联规则&#xff08;Association Rules&#xff09;是反映一个事物与其他事物之间的相互依存性和关联性&#xff0c;是数据挖掘的一个重要技术&#xff0c;用于从大量数据中挖掘出有价值的数据项之间的相关关系。 所谓数据挖掘就是以某种方式分析源数据&#…

大数据分析笔记 (4) -关联规则(Association Rules)

大数据分析笔记 - 关联规则 总览Apriori算法算法流程评估候选规则 (Evaluation of Candidate Rules)置信度 (Confidence)提升度 (Lift)杠杆率 (leverage)对比结合方法 (Combination of Measures) 验证和测试诊断 应用 总览 关联规则是一种无监督学习方法。这是一种描述性(desc…

机器学习-关联规则

关联规则:关联规则是描述在一个交易中物品之间同时出现的规律的知识模式,更确切的说,关联规则是通过量化的数字描述物品A的出现对物品B的出现有多大影响 A与B是独立的两个非空事务,且A、B同属于一个事务集,那么关联规则是形如A=>B的蕴含式。 关联规则有两种度量标准:…

关联规则算法学习—Apriori

关联规则算法学习—Apriori 一、实验项目&#xff1a;关联规则算法学习 项目性质&#xff1a;设计型 二、实验目的&#xff1a; 理解并掌握关联规则经典算法Apriori算法&#xff0c;理解算法的原理&#xff0c;能够实现算法&#xff0c;并对给定的数据集进行关联规则挖掘 三、实…

统计分析 -- t分布

t 分布的图形与特征 以0为中心&#xff0c;左右对称的单峰分布&#xff1b;t分布曲线是一簇曲线&#xff0c;其形态变化与自由度的大小有关。自由度越小&#xff0c;则t 值越分散&#xff0c;t分布曲线的峰部越矮而尾部翘得越高&#xff1b;说明尾部面积&#xff08;概率P&…

t分布表

非常需要&#xff0c;保存下来&#xff0c;随时可以取

正态分布/卡方分布/F分布/T分布

正态分布&#xff1a; 正态分布&#xff08;Normal distribution&#xff09;又名高斯分布&#xff08;Gaussiandistribution&#xff09;&#xff0c;若随机变量X服从一个数学期望为μ、方差为σ^2的高斯分布&#xff0c;记为N(μ&#xff0c;σ^2)。其概率密度函数为正态分布…

t分布(Student t distribution)——正态分布的小样本抽样分布

目录 大样本抽样分布 正态分布小样本抽样分布—t分布 运用t分布构建小样本抽样均值的置信区间 运用t分布进行小样本抽样均值检验 大样本抽样分布 对于大样本的抽样分布&#xff0c;由中心极限定理&#xff0c;无论总体分布是否为正态分布&#xff0c;其均值x_bar的抽样分布…

t分布的构造

t分布是在正态分布和卡方分布的基础上构造的, 我们通过代码实现一下 import numpy as np import seaborn as sns import matplotlib.pyplot as plt import warnings warnings.filterwarnings("ignore")# 正态分布 N np.random.normal(0, 1, 100000)# 自由度为 2, …

数理知识:偏t分布

Hello&#xff0c;大家好&#xff01;最近有在学习一些有关偏态分布的数理知识&#xff0c;但在搜偏 t t t分布的相关资料的时候感觉比较散&#xff0c;所以做个整理&#xff0c;主要参考的书籍是Azzalini在2014年出版的一本有关偏态分布族的书《The Skew-Normal and Related F…