# marc **Repository Path**: fbx-research/marc ## Basic Information - **Project Name**: marc - **Description**: 联合关联关系挖掘方法(Mining Multidimensional Association Rules By Combination,Marc) - **Primary Language**: Python - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: https://www.jiangjianwu.cn/ - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-11-14 - **Last Updated**: 2024-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Marc:联合关联关系挖掘算法 ## 介绍 联合关联关系挖掘方法(Mining Multidimensional Association Rules By Combination,Marc) + 相关论文:[Mining Multidimensional Association Rules By Combination](https://www.jiangjianwu.cn/research/996/marc%e8%81%94%e5%90%88%e5%85%b3%e8%81%94%e5%85%b3%e7%b3%bb%e6%8c%96%e6%8e%98%e7%ae%97%e6%b3%95/) ## 文档目录 ``` |—— Marc 根目录 | |—— experiment 挖掘结果存储目录 | | |—— frequent_[算法]_columns.log 频繁项 | | |—— rules_[算法]_columns.log 关联规则 | | |—— memory_[算法]_columns.log 内存消耗 | | |—— timer_[算法]_columns.log 时间消耗 | |—— libs 算法源代码目录 | |—— result 算法运行结果对比图存储目录 | |—— samples 实验数据集目录 | | |—— train_[行数]_[维度].txt |—— 3d.py 绘制3D图形入口 |—— evaluate.py 算法评估入口 |—— g.py 算法结果对比图绘图入口 |—— s.py 生成试验样本入口 |—— train.py 训练入口 |—— terminal.py 命令行训练入口 ``` ## 算法过程 ![Marc算法流程图](./result/process.png) + (1)读取数据统计样本频次,根据最小支持度和计算出的删除阈值对原始数据集进行筛选,并按照样本频次对数据集降序排列,该步骤可以提升因支持度设置不合理引起的挖掘结果冗余; + (2)对排序后的数据集进行扫描,记录单个样本以及单个样本出现的次数形成样本频数集合,接着,将样本频数集合里的样本两两组合,分别统计样本组合的出现次数,将小于最小支持度的样本组合删除,形成样本组合频数集; + (3)根据样本组合频数集生成样本关系表; + (4)扫描第一步生成的排序后数据集,根据样本关系表将样本重新全排列组合,形成新的样本数据集; + (5)扫描第(4)步的数据集,统计组合样本的频次,计算组合样本的支持度和置信度,生成频繁项和频繁模式。 ## 使用方法 ### 1. 生成单个样本 ```python import libs.samples as sm # 10代表样本行数 20代表样本维度,可自定义 sm.create_samples('./samples/train_10_20.txt',10,20) ``` ### 2. 批量生成样本 ```python # rows代表生成样本的行数 # columns代表生成样本的维度 import libs.samples as sm rows = [10,20,30,40,50] #行数 columns = [5,10,15,20] #维度 for row in rows: for column in columns: sm.create_samples('./samples/train_%d_%d.txt'%(row,column),row,column) ``` ### 3. 执行挖掘过程 ```python # 直接调用 from libs.Marc import Marc marc = Marc('./samples/train_10_20.txt', min_support = 0.01, min_confidence=0.01, write_logs = False, show_logs = False) marc.main() # ==命令行调用== # --type:目前支持:marc\fp-growth\eclat\apriori # --index:目前支持:time/memory # --rows:行数 # --columns:维度 # 设置行数和维度后,系统自动到samples目录下寻找文件train_rows_columns.txt,因此需要使用前提前准备 python terminal.py --type [算法类型] --index [指标] --row [行数] --columns [维度] ``` + 3. 运行效率比较 ![结果](./result/timer_20.png) + 4. 内存消耗比较 ![结果](./result/memory_20.png)