机器学习之FP-growth频繁项集算法

FP-growth算法
项目背景/目的
对于广告投放而言,好的关联会一定程度上提高用户的点击以及后续的咨询成单

对于产品而言,关联分析也是提高产品转化的重要手段,也是大多商家都在做的事情,尤其是电商平台

曾经我用SPSS Modeler做过Apriori关联分析模型,也能满足需求,但是效果自然是不及python了,这里分享一下操作流程

还有一周就双十一了,那不妨去看看产品关联背后的原理

项目原理
步骤一 数据处理
1.遍历所有的数据集合,计算所有项的支持度(次数)
2.丢弃非频繁项(次数小于2)
3.再对所有出现次数降序排列
4.对所有的数据集按照支持度排序,并丢弃非频繁项
~ 到这一步整个数据就处理好了,后面就是生成FP tree以及节点链表

步骤二 FP树创建
1.读取每个集合插入FP树中,同时用一个头部链表数据结构维护不同集合的相同项,这里讲根节点设置为null,就是指根节点不包括任何的项,是为了任何一个数据集进来都被视为空项开始的
2.每新增一个计数加1,没有重合则新增一个节点

步骤三 从FP数中挖掘频繁项集
1.对头部链表进行降序排序
2.对头部链表节点从小到大遍历,得到条件模式基,同时获得一个频繁项集
也就是说对项头表频率最小的开始,找对其对于的叶子节点并计数,也就是其对应的条件模式基

这里的叶子节点计数为 {A:2,C:2,E:1,G:1,D:1},删除阈值小于2的 故只有A,C


代码解释
FP树的节点结构

class treeNode:
    def __init__(self, nameValue, numOccur, parentNode):
        self.name = nameValue # 节点名称
        self.count = numOccur # 节点出现次数
        self.nodeLink = None # 不同项集的相同项通过nodeLink连接在一起
        self.parent = parentNode # 指向父节点
        self.children = {} # 存储叶子节点
    如果需要了解更多机器学习相关内容可以加群:4 2 5 85 19 55获取免费资料
    def inc(self, numOccur):
        """inc(对count变量增加给定值)
        """
        self.count += numOccur

    def disp(self, ind=1):
        """disp(用于将树以文本形式显示)
        """
        print(‘  ‘*ind, self.name, ‘ ‘, self.count)
        for child in self.children.values():
            child.disp(ind+1)

    def __lt__(self, other):
        return self.count < other.count

读取数据并调用createTree方法,设置频繁项集(也就是出现次数这里是100000)

    parsedDat = [line.split() for line in open(‘kosarak.dat‘).readlines()]
    initSet = createInitSet(parsedDat)
    myFPtree, myHeaderTab = createTree(initSet, 100000)
 如果需要了解更多机器学习相关内容可以加群:4 2 5 85 19 55获取免费资料

调用mineTree方法

    myFreList = []
    mineTree(myFPtree, myHeaderTab, 100000, set([]), myFreList)
    print(myFreList)

由于代码量较大就不一一copy上了

结论
最终输出如下结果,eg:浏览(购买)过1的同时也浏览(购买)了6,几百万的数据量运行也是很快的

原文地址:http://blog.51cto.com/14014179/2314164

时间: 2024-11-07 01:04:26

机器学习之FP-growth频繁项集算法的相关文章

频繁项集算法

基础知识: 用户 薯片(A) 可乐(B) 铅笔(C) 羽毛球(D) 洗衣液(E) 1 √ √   √   2 √   √ √ √ 3 √ √   √   4   √ √ √   5 √   √     支持度:单个项占总项集的百分比,比如薯片的支持度=4/5*100%=80%,可乐的支持度=3/5*100%=60%. 置信度:薯片=>羽毛球的置信度=3/4*100%=75%,可乐=>羽毛球的置信度=3/3*100%=100%. 一.Apriori算法 假设minsupport=0.2,得出频繁

FP-growth算法(一)——通过构建FP树发现频繁项集

常见的挖掘频繁项集算法有两类,一类是Apriori算法,另一类是FP-growth.Apriori通过不断的构造候选集.筛选候选集挖掘出频繁项集,需要多次扫描原始数据,当原始数据较大时,磁盘I/O次数太多,效率比较低下.FPGrowth不同于Apriori的"试探"策略,算法只需扫描原始数据两遍,通过FP-tree数据结构对原始数据进行压缩,效率较高. FP代表频繁模式(Frequent Pattern) ,算法主要分为两个步骤:FP-tree构建.挖掘频繁项集. FP树表示法 FP树

FP - growth 发现频繁项集

FP - growth是一种比Apriori更高效的发现频繁项集的方法.FP是frequent pattern的简称,即常在一块儿出现的元素项的集合的模型.通过将数据集存储在一个特定的FP树上,然后发现频繁项集或者频繁项对.通常,FP-growth算法的性能比Apriori好两个数量级以上. FP树与一般的树结构类似,但它通过链接(Link)来连接相似元素,被连起来的元素项可以看成一个链表. 上图是一棵FP树,一个元素项可以在一棵FP树种出现多次,FP树的节点会存储项集的出现频率,每个项集会以路

Spark下的FP-Growth和Apriori(频繁项集挖掘并行化算法)

频繁项集挖掘是一个关联式规则挖掘问题.关联挖掘是数据挖掘中研究最早也是最活跃的领域,其中频繁模式的挖掘是关联挖掘的核心和基础,是产生关联规则挖掘的基础.频繁项集最经典的应用就是超市的购物篮分析. 首先要理解频繁项集中的以下概念. 频繁项:在多个集合中,频繁出现的元素项. 频繁项集:在一系列集合中每项都含有某些相同的元素,这些元素形成一个子集,满足一定阀值就是频繁项集. K项集:K个频繁项组成的一个集合. 支持度:包含频繁项集(F)的集合的数目. 可信度:频繁项与某项的并集的支持度与频繁项集支持度

使用 FP-growth 算法高效挖掘海量数据中的频繁项集

前言 对于如何发现一个数据集中的频繁项集,前文讲解的经典 Apriori 算法能够做到. 然而,对于每个潜在的频繁项,它都要检索一遍数据集,这是比较低效的.在实际的大数据应用中,这么做就更不好了. 本文将介绍一种专门检索频繁项集的新算法 - FP-growth 算法. 它只会扫描数据集两次,能循序挖掘出频繁项集.因此这种算法在网页信息处理中占据着非常重要的地位. FP-growth 算法基本原理 将数据存储到一种成为 FP 树的数据结构中,这样的一棵树包含了数据集中满足最小支持度阈值的所有节点信

FP-growth算法发现频繁项集(二)——发现频繁项集

上篇介绍了如何构建FP树,FP树的每条路径都满足最小支持度,我们需要做的是在一条路径上寻找到更多的关联关系. 抽取条件模式基 首先从FP树头指针表中的单个频繁元素项开始.对于每一个元素项,获得其对应的条件模式基(conditional pattern base),单个元素项的条件模式基也就是元素项的关键字.条件模式基是以所查找元素项为结尾的路径集合.每一条路径其实都是一条前辍路径(perfix path).简而言之,一条前缀路径是介于所査找元素项与树根节点之间的所有内容. 下图是以{s:2}或{

FP-Growth算法之频繁项集的挖掘(python)

前言: 关于 FP-Growth 算法介绍请见:FP-Growth算法的介绍. 本文主要介绍从 FP-tree 中提取频繁项集的算法.关于伪代码请查看上面的文章. FP-tree 的构造请见:FP-Growth算法之 FP-tree 的构造(python). 正文: tree_miner.py文件: #coding=utf-8 import tree_builder import copy class Tree_miner(object): """tree_miner类. 作

FP-Growth算法python实现之频繁项集的挖掘

本文主要介绍从FP-tree中提取频繁项集的算法. 更多请见:FP-Growth算法的介绍.FP_Growth算法python实现.FP-Growth算法python实现之 FP-tree的构造. tree_miner.py代码: #coding=utf-8 import tree_builder import copy class Tree_miner(object): """tree_miner类. 作用:对Tree进行频繁项集的挖掘"""

FP-TREE 算法,频繁项集与关联规则分析

使用场景如: 用户频道属性分析 .用户忠诚度分析 .用户偏好路径分析. 用户偏好终端分析. 用户访问网站时间分析. 用户浏览内容分析 例子:一用户某次访问网站的路径示意图 ABCD ABEGH ABEGW AOU AOV Apriori算法 需要扫描多个事物数据集,增加IO开销.会产生2的k次方频繁项集. FP-Tree算法 概念: 树 链 节点 节点的前向路径 单支 多支 条件基 若Tree为单支,则输出整条单支和条件基BASE,支持度为单支中所有节点支持度的最小值. 若Tree为多支,先输出