1、先验算法概述

Apriori算法由R. Agrawal和R. Srikant在 1994 年给出,用于在数据集中查找关联规则的频繁项集。该算法的名称是 Apriori,因为它使用了频繁项集属性的先验知识。换句话说,我们可以说先验算法是一种关联规则学习,例如分析购买了产品 A 的人也购买了产品B。

我们举一个例子来更好地理解这个概念。比如比萨店的卖家将比萨、软饮料和面包棒组合在一起。他还为购买这些组合的客户提供折扣。你有没有想过他为什么要这样做?他认为购买披萨的顾客也会购买软饮料和面包棒。然而,通过制作组合,他让客户很容易购买并增加了他的销售业绩。

利用其知识,零售商可以为其产品制定交易,例如提供最佳规则折扣或根据客户一起购买的最佳关联规则的数量附加免费商品。无论哪种情况,客户最终都会花费更多来从这些交易中受益。其结果是,该企业提高了销售额,自然获得了高利润。

以上的例子是数据挖掘中关联规则的最佳例子。它有助于我们学习先验算法的概念。

2、先验算法原理

为了构建元素或项目之间的关联规则,该算法考虑了三个重要因素,即支持度、置信度提升度。这些因素中的每一个都解释如下:

支持度,用来计算A的受欢迎程度。

        Support(A) = (A的交易数量)/(交易总量)

置信度,可以计算购买物品 X 时购买物品 Y 的可能性的百分比。

        Confidence(A->B) = Support(AUB) / Support(A)

提升度,确定最佳规则之间关联强度的指标。

Lift = Confidence(A->B)/Support(A)*Support(B)

3、一个简单实例

假设您在有4000个客户交易。然后我们计算两种产品的Support、Confidence 和 Lift,比如说 饼干和巧克力,因为客户经常一起购买这两种商品。

在 4000 笔交易中,其中400笔包含饼干,而其中600笔包含巧克力,这600笔交易中包括200笔包含饼干和巧克力的交易。

使用这些数据,我们将找出支持度、置信度提升度

支持度(饼干) =  (饼干) / (总交易) = 400/4000 = 10%

置信度 = (饼干和巧克力) / (饼干) = 200/400 = 50%,这意味着 50% 的购买饼干的顾客也购买了巧克力。

提升度 = (置信度 (饼干和巧克力)/ (支持度(饼干) = 50/10 = 5

这意味着人们同时购买饼干和巧克力的概率是单独购买饼干的概率的五倍。如果提升度低于 1,则人们不太可能同时购买这两种物品。 值越大,组合一起被购买的几率越大。

4、使用python实现

我们使用超市的销售记录作为数据集,下面是下载地址。

链接:https://pan.baidu.com/s/112Hkf4EQ5igZEj3wcqrWdw
提取码:to95

使用如下命令进行算法库安装

pip install apyori

导入包

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

导入数据集

Data = pd.read_csv('Market_Basket_Optimisation.csv', header = None)

转换为列表

# Intializing the list
transacts = []
# populating a list of transactions
for i in range(0, 7501): transacts.append([str(Data.values[i,j]) for j in range(0, 20)])

训练先验模型

from apyori import apriori
rule = apriori(transactions = transacts, min_support = 0.003, min_confidence = 0.2, min_lift = 3, min_length = 2, max_length = 2)

可视化结果

output = list(rule) # returns a non-tabular output
# putting output into a pandas dataframe
def inspect(output):lhs         = [tuple(result[2][0][0])[0] for result in output]rhs         = [tuple(result[2][0][1])[0] for result in output]support    = [result[1] for result in output]confidence = [result[2][0][2] for result in output]lift       = [result[2][0][3] for result in output]return list(zip(lhs, rhs, support, confidence, lift))
output_DataFrame = pd.DataFrame(inspect(output), columns = ['Left_Hand_Side', 'Right_Hand_Side', 'Support', 'Confidence', 'Lift'])

未排序结果

按 Lift 列降序排列的结果

output_DataFrame.nlargest(n = 10, columns = 'Lift')

5、缺点和优点

优点是易于理解、易于在大型数据集上实现

        缺点是需要扫描整个数据集,对计算能力要求高,如果是大型数据集,计算会十分耗时。

6、提高先验效率的方法

        许多方法可用于提高算法的效率。

1、基于哈希的技术:此方法使用称为哈希表的基于哈希的结构来生成 k 项集及其相应的计数。它使用哈希函数来生成表。

2、事务减少:这种方法减少了迭代中的事务扫描次数。不包含频繁项的事务被标记或删除。

3、分区:这种方法只需要两次数据库扫描来挖掘频繁项集。它说,对于任何可能在数据库中频繁出现的项集,它应该在数据库的至少一个分区中频繁出现。

4、抽样:该方法从数据库 D 中随机抽取一个样本 S,然后在 S 中搜索频繁项集。可能会丢失全局频繁项集。这可以通过降低 min_sup 来减少。

5、动态项集计数:这种技术可以在扫描数据库期间在数据库的任何标记的起点添加新的候选项集。

7、相关参考

一种改进的关联规则先验算法

https://arxiv.org/pdf/1403.3948.pdfhttps://arxiv.org/pdf/1403.3948.pdf

机器学习笔记 - 什么是先验算法(Apriori Algorithm)?相关推荐

  1. 吴恩达机器学习笔记55-异常检测算法的特征选择(Choosing What Features to Use of Anomaly Detection)

    吴恩达机器学习笔记55-异常检测算法的特征选择(Choosing What Features to Use of Anomaly Detection) 对于异常检测算法,使用特征是至关重要的,下面谈谈 ...

  2. Python机器学习笔记:异常点检测算法——Isolation Forest

    Python机器学习笔记:异常点检测算法--Isolation Forest 参考文章: (1)Python机器学习笔记:异常点检测算法--Isolation Forest (2)https://ww ...

  3. 关联规则算法Apriori algorithm详解以及为什么它不适用于所有的推荐系统

    在1994年首次提出的一种关联规则挖掘算法,它可以在特定类型的数据中找到关系,并将其表示为规则.关联规则挖掘最常用于营销,特别是在购物车的上下文中.这个应用领域被正式称为"购物车分析&quo ...

  4. [吴恩达机器学习笔记]14降维3-4PCA算法原理

    14.降维 觉得有用的话,欢迎一起讨论相互学习~Follow Me 14.3主成分分析原理Proncipal Component Analysis Problem Formulation 主成分分析( ...

  5. matlab算法用python做_机器学习笔记—朴素贝叶斯算法实现(matlab/python)

    原理知道一百遍不如自己动手写一遍,当然,现在基本上不需要自己来写算法的底层code了,各路大神们已经为我等凡夫俗子写好了,直接调用就行. 这里介绍在MATLAB中和Python中应用贝叶斯算法的小例子 ...

  6. 斯坦福CS229机器学习笔记-Lecture5 - 生成学习算法+高斯判别GDA+朴素贝叶斯+拉普拉斯平滑

    作者:teeyohuang 邮箱:teeyohuang@163.com 本文系原创,供交流学习使用,转载请注明出处,谢谢 声明:此系列博文根据斯坦福CS229课程,吴恩达主讲 所写,为本人自学笔记,写 ...

  7. 01. 机器学习笔记01——K近邻算法 , CV_example

    K近邻算法(K-nearest neighbor,KNN算法) 李航博士<统计学习方法> 最近邻(k-Nearest Neighbors,KNN)算法是一种分类算法 应用场景:字符识别.文 ...

  8. 【机器学习笔记】如何改进算法性能

    通常改进算法性能有以下几种方法: 1.增加数据 用于解决高方差的问题.但是有更多的数据不一定能获得更好的效果. 2.选用更少的特征 来防止过拟合,解决高方差.注意,如果是处于高偏差了,就不要再减少特征 ...

  9. 机器学习笔记之朴素贝叶斯分类算法

    朴素贝叶斯分类算法: 优点:在数据较少的情况下仍然有效,可以处理多分类问题. 缺点:对于输入数据的准备方式较为敏感. 适用数据类型:标称型数据(离散型数据) 算法原理: 对于某一个条件,这个条件下哪个 ...

  10. 机器学习笔记(3)---K-近邻算法(1)---约会对象魅力程度分类

    参考资料 <机器学习实战>,Machine Learning in Action,本文中简称MLiA <机器学习>周志华,本文简称西瓜书 <Web安全之机器学习>刘 ...

最新文章

  1. 优秀!一鼓作气学会“一致性哈希”,就靠这 18 张图了
  2. 第22届清华大学电子设计大赛决赛
  3. Python divmod 函数 - Python零基础入门教程
  4. 使用RTL-SDR,从打开一个车门到批量打开车门
  5. 单件模式与业务逻辑服务层封装
  6. 018 微服务之间调用
  7. Android---------------Handler的学习
  8. Facebook开源新的压缩算法,性能超zlib
  9. 测试es from size error,from + size must be less than or equal to: [10000]异常问题
  10. [转] 电子技术*笔记4【2013-03】
  11. 混合开发Ionic+angular快速开发App
  12. 快门光圈感光度口诀_曝光补偿怎么调,快门光圈感光度口诀,深度解析曝光补偿...
  13. 实验一计算机网络基础知识,计算机网络实验基础知识 集线器的使用
  14. 知乎live-李笑来-人人都能用英语-笔记
  15. shipyard docker集群问题
  16. 参加《前沿科学国际研讨会》的世界著名学者简介
  17. 网络原理IP协议/以太网
  18. w ndows无法连接到System,Windows无法连接到System Event Notification Service服务解决方法...
  19. python--敲击木鱼积累功德小项目(更新版(2))
  20. 空口定义、下行传输流程

热门文章

  1. ipv6有必要打开吗_路由器中的IPv6功能需不需要开启?
  2. RTI_DDS自定义插件开发 9 API NDDS_Transport_Unshare_RecvResource_Fcn_rrEA
  3. 都9012年了还没用过typescript?
  4. Java使用comms-net jar包完成ftp文件上传进度的检测功能
  5. python爬取固定酒店评论_爬取携程上酒店评论数据
  6. 自定义滚动条文档(mCustomScrollbar使用文档)
  7. css 1倍图 2倍图 3倍图
  8. MySQL重复数据排序_排序数据以在MySQL中重复记录
  9. PAT-两个数的简单计算器(简单编程题)
  10. 数学分析考研不常见必记积分公式