【数据挖掘】十大算法之Apriori关联算法

简介: Apriori关联算法,这是一种用于发现数据集中频繁项集和关联规则的数据挖掘技术,通过迭代过程找出满足最小支持度阈值的项集。

1 相关概念

交易号码 商品
1 豆奶,莴苣
2 莴苣,尿布,葡萄酒,甜菜
3 豆奶,尿布,葡萄酒,橙汁
4 莴苣,豆奶,尿布,葡萄酒
5 莴苣,豆奶,尿布,橙汁

频繁项集: 经常出现在一块的物品的集合,是指那些经常出现在一起的物品,例如的{葡萄酒、尿布、豆奶},从上面的数据集中也可以找到尿布->葡萄酒的关联规则,这意味着有人买了尿布,那很有可能他也会购买葡萄酒。

关联规则: 暗示两种物品之间可能存在很强的关系

支持度: 一个项集的支持度被定义为数据集中包含该项集的记录所占的比例,上图中,豆奶的支持度为4/5,(豆奶、尿布)为3/5。支持度是针对项集来说的,因此可以定义一个最小支持度,只保留最小支持度的项集。

支持度 = (包含物品A的记录数量) / (总的记录数量)

置信度: 针对如{尿布}->{葡萄酒}这样的关联规则来定义的。计算为 支持度{尿布,葡萄酒}/支持度{尿布},其中{尿布,葡萄酒}的支持度为3/5,{尿布}的支持度为4/5,所以“尿布->葡萄酒”的可行度为3/4=0.75,这意味着尿布的记录中,我们的规则有75%都适用。

置信度( A -> B) = (包含物品A和B的记录数量) / (包含 A 的记录数量)

2 算法思想和步骤

(1)算法思想

如果某个项集是频繁项集,那么它所有的子集也是频繁的,即如果 {0,1} 是频繁的,那么 {0}, {1} 也一定是频繁的。反之。

在图中,已知阴影项集{2,3}是非频繁的。利用这个知识,我们就知道项集{0,2,3},{1,2,3}以及{0,1,2,3}也是非频繁的。也就是说,一旦计算出了{2,3}的支持度,知道它是非频繁的后,就可以紧接着排除{0,2,3}、{1,2,3}和{0,1,2,3}。

(2)算法步骤

提供两个参数,数据集和最小支持度。

先遍历1个物品组合的情况,剔除掉支持度低于最小支持度的数据项,然后用剩下的物品进行组合。遍历2个物品组合的情况,再剔除不满足条件的组合。不断递归下去,直到不再有物品可以组合。

3 Python案例解析

def apriori(df, min_support=0.5, use_colnames=False, max_len=None)

参数如下:

  • df:数据集。
  • min_support:给定的最小支持度。
  • use_colnames:默认False,则返回的物品组合用编号显示,为True的话直接显示物品名称。
  • max_len:最大物品组合数,默认是None,不做限制。如果只需要计算两个物品组合的话,便将这个值设置为2。
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
#设置数据集
dataset = [['牛奶','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'],
        ['莳萝','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'],
        ['牛奶','苹果','芸豆','鸡蛋'],
        ['牛奶','独角兽','玉米','芸豆','酸奶'],
        ['玉米','洋葱','洋葱','芸豆','冰淇淋','鸡蛋']]
te = TransactionEncoder()
#one-hot 编码
te_ary = te.fit(records).transform(records)
df = pd.DataFrame(te_ary, columns=te.columns_)
#利用 Apriori 找出频繁项集
freq = apriori(df, min_support=0.05, use_colnames=True)

我们设定的最小支持度是0.6,那么只有支持度大于0.6的物品集合才是频繁项集,最终结果如下:

support itemsets

0.6 (洋葱)

0.6 (牛奶)

1.0 (芸豆)

0.6 (酸奶)

0.8 (鸡蛋)

0.6 (芸豆, 洋葱)

0.6 (洋葱, 鸡蛋)

0.6 (牛奶, 芸豆)

0.6 (酸奶, 芸豆)

0.8 (芸豆, 鸡蛋)

0.6 (芸豆, 洋葱, 鸡蛋)

目录
相关文章
|
7月前
|
算法 数据挖掘 Python
【数据挖掘】层次聚类DIANA、AGNES算法讲解及实战应用(图文解释 超详细)
【数据挖掘】层次聚类DIANA、AGNES算法讲解及实战应用(图文解释 超详细)
510 0
|
4月前
|
机器学习/深度学习 自然语言处理 算法
【数据挖掘】金山办公2020校招大数据和机器学习算法笔试题
金山办公2020校招大数据和机器学习算法笔试题的解析,涵盖了编程、数据结构、正则表达式、机器学习等多个领域的题目和答案。
106 10
|
4月前
|
自然语言处理 算法 数据挖掘
【数据挖掘】十大算法之PageRank连接分析算法
文章介绍了PageRank算法的基本概念和数学模型,包括如何通过一阶马尔科夫链定义随机游走模型以及如何计算网页的重要性评分,并提供了PageRank迭代算法的具体步骤。
88 0
|
3月前
|
机器学习/深度学习 数据采集 算法
数据挖掘和机器学习算法
数据挖掘和机器学习算法
|
4月前
|
机器学习/深度学习 存储 人工智能
【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
本文是关于2022-2023年知能科技公司机器学习算法工程师岗位的秋招笔试题,包括简答题和编程题,简答题涉及神经网络防止过拟合的方法、ReLU激活函数的使用原因以及条件概率计算,编程题包括路径行走时间计算和两车相向而行相遇时间问题。
79 2
【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
|
4月前
|
机器学习/深度学习 自然语言处理 算法
【数据挖掘】2020奇安信秋招算法方向试卷1 笔试题解析
2020年奇安信秋招算法方向试卷1的题目解析,覆盖了数据结构、机器学习、深度学习、自然语言处理、排序算法、激活函数、主题模型、采样方法、图像处理等多个领域的知识点。
53 1
【数据挖掘】2020奇安信秋招算法方向试卷1 笔试题解析
|
4月前
|
机器学习/深度学习 存储 算法
【数据挖掘】2020奇安信秋招算法方向试卷3 笔试题解析
2020年奇安信秋招算法方向试卷3的题目解析,涵盖了数据结构、机器学习、深度学习、自然语言处理、排序算法、激活函数、PCA、词嵌入库等多个领域的知识点。
64 1
【数据挖掘】2020奇安信秋招算法方向试卷3 笔试题解析
|
4月前
|
机器学习/深度学习 人工智能 算法
【数据挖掘】2022年2023届秋招奇虎360机器学习算法工程师 笔试题
本文提供了奇虎360公司2022年秋招机器学习算法工程师岗位的笔试题内容,包括选择题和编程题,涉及概率统计、数据结构、机器学习、计算机组成原理等多个领域。
100 5
|
4月前
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】2022年2023届秋招宏瓴科技公司机器学习算法工程师 笔试题
关于宏瓴科技有限公司2022-2023年秋招机器学习算法工程师岗位的笔试题目及作者个人对部分题目的解答尝试,涉及贝叶斯误差和贝叶斯最优分类器的概念、贝叶斯误差的重要性和估算方法,以及如何有效利用训练集和测试集进行深度学习模型训练的数据集划分策略。
61 4
|
4月前
|
数据采集 资源调度 算法
【数据挖掘】十大算法之K-Means K均值聚类算法
K-Means聚类算法的基本介绍,包括算法步骤、损失函数、优缺点分析以及如何优化和改进算法的方法,还提到了几种改进的K-Means算法,如K-Means++和ISODATA算法。
130 4

热门文章

最新文章