目录

介绍

Apriori模型

频繁项集

关联规则

结论与分析


可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表。

介绍

Apriori是一种学习频繁项集和关联规则的算法。Apriori是一种自下而上的方法,它将对象扩展到每次迭代的频繁项集。当没有要扩展的对象时,算法终止。

Apriori模型

频繁项集

频繁项集是通常同时发生的一组对象。

传统方法将多次遍历数据集。为了减少计算量,研究人员发现了一种称为Apriori原理的东西。Apriori原理帮助我们减少可能有趣的项目集的数量。Apriori原理说如果一个项集是频繁的,那么它的所有子集都是频繁的。乍一看似乎没用。但是,如果我们将其内部翻出来,它会说如果一个项目集不频繁,那么它的所有超集都是不频繁的。这意味着在自下而上的过程中,如果底部项目集不频繁,我们不需要在顶部处理该集合。例如,存在集合A = {1,2,3,4}。A生成的所有可能项目集如下所示:

如果项目集{0,1}不频繁,则包含{0,1}的所有项集都不频繁,这意味着我们可以跳过这些以蓝色圆圈标记的项目集。

频繁项集的生成包括以下步骤:

1、首先,计算单例集。所有元素都被视为候选集。

def createSingletonSet(self, data):singleton_set = []for record in data:for item in record:if [item] not in singleton_set:singleton_set.append([item])singleton_set.sort()singleton_set = list(map(frozenset, singleton_set))   # generate a invariable setreturn singleton_set

2、合并单例集以生成更多候选集。

def createCandidateSet(self, frequent_items, k):candidate_set = []items_num = len(frequent_items)# merge the sets which have same front k-2 elementfor i in range(items_num):for j in range(i+1, items_num):L1 = list(frequent_items[i])[: k-2]L2 = list(frequent_items[j])[: k-2]if L1 == L2:candidate_set.append(frequent_items[i] | frequent_items[j])return candidate_set

3、计算所有候选集的支持度,并选择支持度大于最小支持度的候选集作为频繁项集。

def calculateSupportDegree(self, data, candidate_set):sample_sum = len(data)data = map(set, data)                   # transform data into set# calculate the frequency of each set in candidate_set appearing in datafrequency = {}for record in data:for element in candidate_set:if element.issubset(record):  # elements in recordfrequency[element] = frequency.get(element, 0) + 1# calculate the support degree for each setsupport_degree = {}frequent_items = []for key in frequency:support = frequency[key]/sample_sumif support >= self.min_support:frequent_items.insert(0, key)support_degree[key] = supportreturn frequent_items, support_degree

4、组合以上功能:

def findFrequentItem(self, data):singleton_set = self.createSingletonSet(data)sub_frequent_items, sub_support_degree =self.calculateSupportDegree(data, singleton_set)frequent_items = [sub_frequent_items]support_degree = sub_support_degreek = 2while len(frequent_items[k-2]) > 0:candidate_set = self.createCandidateSet(frequent_items[k-2], k)sub_frequent_items, sub_support_degree =self.calculateSupportDegree(data, candidate_set)support_degree.update(sub_support_degree)if len(sub_frequent_items) == 0:breakfrequent_items.append(sub_frequent_items)k = k + 1return frequent_items, support_degree

关联规则

关联规则是发生导致其他事情发生的事情。例如,有一个频繁的项目集{beer, diaper}。可能存在关联规则diaper -> beer,这意味着有人也可以通过beer购买diaper。请注意,规则是​​单向的,这意味着规则beer ->diaper可能不正确。

关联规则的生成包括以下步骤:

1、计算每个频繁项集的置信度,并选择置信度大于最小置信度的项集。

def calculateConfidence(self, frequent_item, support_degree, candidate_set, rule_list):rule = []confidence = []for item in candidate_set:temp = support_degree[frequent_item]/support_degree[frequent_item - item]confidence.append(temp)if temp >= self.min_confidence:rule_list.append((frequent_item - item, item, temp))  # association rulerule.append(item)return rule

2、合并频繁项集以生成更多关联规则:

def mergeFrequentItem(self, frequent_item, support_degree, candidate_set, rule_list):item_num = len(candidate_set[0])if len(frequent_item) > item_num + 1:candidate_set = self.createCandidateSet(candidate_set, item_num+1)rule = self.calculateConfidence(frequent_item, support_degree, candidate_set, rule_list)if len(rule) > 1:self.mergeFrequentItem(frequent_item, support_degree, rule, rule_list)

3、组合以上功能:

def generateRules(self, frequent_set, support_degree):rules = []for i in range(1, len(frequent_set)):    # generate rule from sets# which contain more than two elementsfor frequent_item in frequent_set[i]:candidate_set = [frozenset([item]) for item in frequent_item]if i > 1:self.mergeFrequentItem(frequent_item, support_degree, candidate_set, rules)else:self.calculateConfidence(frequent_item, support_degree, candidate_set, rules)return rules

结论与分析

Apriori是一种生成频繁项集和关联规则的简单算法。但它更适合sprase数据集。现在,我们有一个数据集如下。让我们看看Apriori的结果。结果是元组为(X,Y,置信度)。

可以在MachineLearning中找到本文中的相关代码和数据集。

有兴趣的小伙伴可以查看上一篇 。

原文地址:https://www.codeproject.com/Articles/5142921/Step-by-Step-Guide-to-Implement-Machine-Learning-9

实现机器学习的循序渐进指南XII——Apriori相关推荐

  1. 实现机器学习的循序渐进指南系列汇总

    之前曾尝试翻译了机器学习中的KNN和决策树,最近这段时间陆续看到这个系列的相关文章,并尝试翻译分析.由于此系列文章直接相对零散,所以有了这篇简单的汇总文章,以帮助有兴趣的小伙伴迅速找到想看的文章. 具 ...

  2. 实现机器学习的循序渐进指南XI——DBSCAN

    目录 介绍 DBSCAN模型 开始 聚类算法 参数估计 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 基于密度的噪声应用空间聚类(DBSCAN)是一种基于密度 ...

  3. 实现机器学习的循序渐进指南X——KMeans

    目录 介绍 KMeans模型 KMEANS 平分KMeans KMEANS ++ 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 KMeans是一种简单的聚类算 ...

  4. 实现机器学习的循序渐进指南VIII——线性回归

    目录 介绍 回归模型 线性回归 局部加权线性回归 岭回归 套索(Lasso)回归 逐步线性回归 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 通常存在变量之间 ...

  5. 实现机器学习的循序渐进指南IX ——树回归

    目录 介绍 回归模型 特征选择 回归树的生成 回归 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 在现实世界中,一些关系不是线性的.因此,应用线性回归分析这些 ...

  6. 实现机器学习的循序渐进指南VII——Blending Stacking

    目录 介绍 混合(Blending)模型 混合(Blending)架构 混合(Blending)实现 混合(Blending)分类 堆叠(Stacking)模型 堆叠(Stacking)架构 堆叠(S ...

  7. 实现机器学习的循序渐进指南VI——AdaBoost

    目录 介绍 AdaBoost模型 弱分类器 权重更新 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 AdaBoost是Boosting的一种方法,它基于 ...

  8. 实现机器学习的循序渐进指南V——支持向量机

    目录 介绍 SVM模型 优化问题 优化算法 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 支持向量机(SVM)是一种基于特征空间最大边距的分类器.SVM ...

  9. 实现机器学习的循序渐进指南IV——逻辑回归

    目录 介绍 逻辑回归模型 参数估计 优化算法 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 逻辑回归是统计学习中的经典方法,它计算条件概率P(Y|X)并 ...

最新文章

  1. camera中LENS和SENSOR的CRA是如何搭配的?
  2. javascript的typeof返回哪些数据类型
  3. locate 命令详解
  4. php中cookie的用法
  5. Zookeeper--ZAB与Paxos算法联系与区别
  6. python 轮廓矩阵_python – 在3D numpy矩阵中绘制给定值的曲面轮廓
  7. 在频域上,随机接入前导占用()个资源块对应的带宽
  8. 使用jquery简化ajax开发
  9. poj 2594 Treasure Exploration 匈牙利二分匹配+floyd
  10. Oracle建立用户和表空间
  11. Thrift RPC实战(七) 基于zookeeper和thrift的RPC服务发布订阅
  12. 系统集成项目管理工程师(软考中级)知识点总结【挣值分析】【关键路径】
  13. 康泰克音源采样器完整版-Native Instruments Kontakt 6.5.3 WiN-MAC
  14. windows server添加角色
  15. Seeker的奇妙求职历险(华为笔试)
  16. Win 10-jdk 8 下载和安装步骤
  17. 磁盘阵列RAID技术详解
  18. Linux系统的权限管理
  19. 两年网罗13位扫地僧,阿里达摩院最新架构完整曝光
  20. 在线运行python的网站-Python在线练习运行平台

热门文章

  1. strcpy用于调用的参数太少_JVM:虚拟机方法调用(理解重载和重写的本质)
  2. linux基础命令怎么记,linux基础命令--笔记(示例代码)
  3. python 给类添加属性_python – 如何动态添加属性到类中?
  4. 2016年4月计算机组成原理试题答案,全国2018年4月自考(02318)计算机组成原理试题及答案...
  5. syslinux引导扇区不支持ntfs文件系统_磁盘与文件系统
  6. 新冠状病毒显微放大品质背景,让你做相关项目更具专业性。
  7. APP界面的数据可视化设计临摹学习模板
  8. 微型计算机中AGP指,2011江苏省计算机等级考试二级理论考试试题及答案
  9. dpm码识别_如何读取直接零件打标码(DPM)
  10. Python爬虫项目---批量从搜款网下载主图、颜色图详情图