【机器学习实战-python3】使用Apriori算法进行关联 分析

本文介绍了关联分析的概念,如频繁项集和关联规则,并讲解了Apriori算法及其原理,用于从大规模数据中高效地发现有趣的关系。通过Python代码示例展示了如何实现Apriori算法,并探讨了从频繁项集中挖掘关联规则的方法。
摘要由CSDN通过智能技术生成

本篇的数据和代码参见:https://github.com/stonycat/ML-in-Action

一、背景
从大规模数据集中寻找物品间的隐含关系被称作关联分析(association analysis)或者关联规则学习(association rule learning)。
关联分析是一种在大规模数据集中寻找有趣关系的任务。这些关系可以有两种形式:频繁项
集或者关联规则。频繁项集(frequent item sets)是经常出现在一块的物品的集合,关联规则(association rules)暗示两种物品之间可能存在很强的关系。

当寻找频繁项集时,频繁(frequent)的定义是什么?
有许多概念可以解答上述问题,不过其中最重要的是支持度和可信度
1-一个项集的支持度(support)
被定义为数据集中包含该项集的记录所占的比例。支持度是针对项集来说的,因此可以定义一个最小支持度,而只保留满足最
小支持度的项集。

2-可信度或置信度(confidence)
是针对一条诸如{尿布} ➞ {葡萄酒}的关联规则来定义的。这
条规则的可信度被定义为“支持度({尿布, 葡萄酒})/支持度({尿布})”。从图11-1中可以看到,由
于{尿布, 葡萄酒}的支持度为3/5,尿布的支持度为4/5,所以“尿布 ➞ 葡萄酒”的可信度为3/4=0.75。
这意味着对于包含“尿布”的所有记录,我们的规则对其中75%的记录都适用。

如果面对成千上万的数据,如生成一个物品所有可能组合的清单,然后对每一种组合统计它出现的频繁程度,但当物品成千上万时,上述做法非常非常慢。这里就需要引入Apriori原理来减少计算量。

二、Apriori 原理与实现
Apriori原理可以帮我们减少可能感兴趣的项集。Apriori原理是说如果某个项集是频繁的,那么它的所有子集也是频繁的。这个原理直观上并没有什么帮助,但是如果反过来看就有用了,也就是说如果一个项集是非频繁集,那么它的所有超集也是非频繁的。
这里写图片描述

关联分析的目标包括两项:发现频繁项集和发现关联规则。首先需要找到频繁
项集,然后才能获得关联规则。
Apriori算法是发现频繁项集的一种方法。 Apriori算法的两个输入参数分别是最小支持度和数
据集。该算法首先会生成所有单个物品的项集列表。接着扫描交易记录来查看哪些项集满足最小支持度要求,那些不满足最小支持度的集合会被去掉。然后,对剩下来的集合进行组合以生成包含两个元素的项集。接下来,再重新扫描交易记录,去掉不满足最小支持度的项集。该过程重复进行直到所有项集都被去掉。

# -*- coding: utf-8 -*-

from numpy import *


def loadDataSet():
    return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]

# C1 是大小为1的所有候选项集的集合
def createC1(dataSet):
    C1 = []
    for transaction in dataSet:
        for item in transaction:
            if not [item] in C1:
                C1.append([item]) #store all the item unrepeatly

    C1.sort()
    #return map(frozenset, C1)#frozen set, user can't change it.
    return lis
  • 22
    点赞
  • 151
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值