机器学习实战笔记9(Apriori算法)

Apriori算法也属于无监督学习,它强调的是“从数据X中能够发现什么”。从大规模的数据集中寻找物品之间隐含关系被称为关联分析或者称为关联规则学习。这里的主要问题在于,寻找物品的不同组合是一项十分耗时的任务,所需的计算代价很高,蛮力搜索并不能解决这个问题。因此此处介绍使用Apriorio算法来解决上述问题。

1:简单概念描述

(1)              频繁项集:指经常出现在一块的物品的集合。 关联规则暗示两种物品之间存在很强的关系。(这里我们事先定义阀值,超过该阀值,证明两者之间存在很强的关系).

(2)              一个项集的支持度(support)被定义为数据集中包含该项集的记录所占的比例。我们事先需要定义一个最小支持度(minSupport),而只保留满足最小支持度的项集。

(3)              可信度或置信度(confidence)是针对一条诸如{尿布}->{葡萄酒}的关联规则来定义的。

(4)              Apriori的原理是如果某个项集是频繁的,那么它的子集也是频繁的。反过来说,如果一个项集是非频繁的,那么它的所有超集也是非频繁的。比如{1,2}出现的次数已经小于最小支持度了(非频繁的),那么超集{0,1,2}的组合肯定也是非频繁的了。主要包括发现频繁项集和挖掘关联规则这两步。

2:发现频繁项集

过程是:从C1= { {0},{1},{2},{3}}开始,然后生成L1,L1是C1中项集的支持度大于等于最小支持度,比如L1 = { {0},{1},{3}}。然后由L1组合得到C2 = { {01},{03},{13}}。一直进行下去直到Ck为空。

[python]  view plain copy print ?
  1. # 加载数据  
  2. def loadDataSet():  
  3.     return [[1,3,4], [2,3,5], [1,2,3,5], [2,5]]  
  4.   
  5. # 创建C1  
  6. def createC1(dataSet):  
  7.     C1 = []  
  8.     for transaction in dataSet:  
  9.         for item in transaction:  
  10.             if not[item] in C1:  
  11.                 C1.append([item])  
  12.     C1.sort()  
  13.     return map(frozenset, C1)            #frozenset 可以将集合作为字典的键字使用  
  14.   
  15. # 由Ck生成Lk  
  16. def scanD(D, Ck, minSupport):  
  17.     ssCnt = {}  
  18.     for tid in D:  
  19.         for can in Ck:  
  20.             if can.issubset(tid):  
  21.                 if not ssCnt.has_key(can):ssCnt[can] = 1  
  22.                 else: ssCnt[can] += 1  
  23.     numItems = float(len(D))  
  24.     retList = []  
  25.     supportData = {}  
  26.     for key in ssCnt:  
  27.         support = ssCnt[key]/numItems  
  28.         if support >= minSupport:  
  29.             retList.insert(0, key)            #在列表的首部插入任意新的集合  
  30.         supportData[key] = support  
  31.     return retList, supportData  
  32.   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值