程一舰

数据技术处

我们常说我们生活在信息时代,实际上,我们更多的还是生活在数据时代。因为从过去到现在累积了大量的数据,对数据的挖掘和分析也仅是从最近几年大数据和人工智能技术的发展而兴起。我们对现有数据价值的利用还远低于数据本身拥有的价值。随着数据在党的十九届四中全会中与劳动、资本、土地、知识、技术、管理等一起被列为生产要素,数据价值的挖掘将会越来越深入。数据挖掘在《Data Mining》一书中的解释就是从大量数据中挖掘有趣模式和知识的过程。既然未来已来,我们就要顺应时代发展,掌握必备技能。

在前面我们介绍了一种简单的挖掘商品关联性算法。今天要介绍的是更高效的FP-Growth算法(FP指的是Frequent Pattern),它可以用到搜索词提醒,常用词,挖掘强关联性商品,商品推荐等领域上。挖掘商品关联系或者词语之间的关联性,需要做的事是构造各种商品组合然后分析出这种组合是否是高频率出现。Apriori算法每产生一种组合都要遍历一次数据库来判断当前组合是否是高频记录,这个在大量数据面前是很耗时间。

一、原理介绍

与Apriori算法相比,FP-Growth算法更进一步,通过将交易数据巧妙的构建出一颗FP树,然后在FP树中递归的对频繁项进行挖掘。FP-Growth算法仅仅需要两次扫描数据库,第一次是统计每个商品的频次,用于剔除不满足最低支持度的商品,然后排序得到FreqItems。第二次,扫描数据库构建FP树。还是以之前Apriori的例子来一步步的详细分析FP树的构建,和频繁项的递归挖掘。

首先,找出频繁1项集,支持度为50%

ID集合{1,2,3,5},所以在剔除ID=4和6后,对每条订单的商品序列按照商品出现的频率进行重新排序,得到如下:

然后,构建FP-Tree

如果我们想获取谁的频繁模式,只需要找到该节点并上溯寻找到所有节点即可,举个例子,找到2的频繁项集候选集,可以得到两个个路径;根据这个FP-Tree,挖掘频繁模式就是通过递归的获取节点的子树的过程。子树构建方式如下:新建一个新的FP树,然后遍历树中所有的待挖掘节点,往上找,直到root节点,然后把当前路径上的非根节点添加到subTree中,每个节点的频次为当前遍历节点的频次。

我们以2节点为例,找到2节点的路径{2,1,3}和{2,3},每个路径的频率等于该路径中2节点的频率,因此

2-1-3=>3

2-3=>1

然后我们构建新的subTree:

所以根据指出度为50%,我们可以得到{2},{2,3},{2,3,1}都是频繁模式,例如{2,1,3}总共出现3次,3/5=0.6 = 60% 大于我们要求的支持度50%;{2}和{2,3}都出现4次,其他的依次类推;

二、验证

我们通过Spark的MLlib中提供的数据挖掘算法FP-Growth来验证一下我们的结果

通过结果可以看出我们的计算是对的

三、适用场景

除了跟Apriori算法一样,用来进行一些关联商品推荐,FP-Tree还可以用于这样的场景:输入一个单词或者单词的一部分,推断出你可能要搜索的查询词项,比如在百度输入“xxx大学”开始查询时,会出现诸如“xxx大学为什么还不放假”之类的推荐结果。

FP-Growth又称为FP-增长算法,它比Apriori算法要快,它基于Apriori构建,但在完成相同任务时采用了一些不同的技术。不同于Apriori算法的”产生-测试”,这里的任务是将数据集存储在一个特定的称做FP树的结构之后发现频繁项集或者频繁项对,即常在一块出现的元素项的集合FP树,这种做法是的算法的执行速度要快于Apriori,通常性能要好两个数量级以上。

四、总结

数据挖掘中关于关联规则或者频繁模式挖掘类的算法,也是我们日常生活中经常用到的算法。数据挖掘还有很多有趣的算法, 这些算法能让我们更好的从数据从挖掘价值信息。同时,大数据平台也将一如既往的为各种数据挖掘类应用提供算力支持,为我行金融科技发展打造坚持的大数据平台支撑。

数据挖掘原理与算法_技术分享|大数据挖掘算法之FPGrowth算法相关推荐

  1. 数据挖掘算法_技术分享|大数据挖掘算法之KNNk近邻算法

    程一舰 数据技术处 K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居 ...

  2. 大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优

    侯亚南 数据技术处 支宸啸 数据技术处 在大数据计算中,我们可能会遇到一个很棘手的问题--数据倾斜,此时spark任务的性能会比预期要差很多:绝大多数task都很快执行完成,但个别task执行极慢或者 ...

  3. 位图排序 大数据_干货分享:大话12种排序算法

    干货分享:大话12种排序算法 常见的排序算法: 快速排序.堆排序.归并排序.选择排序 插入排序.二分插入排序 冒泡排序.鸡尾酒排序 桶排序.计数排序.基数排序.位图排序 技能点: 1.归并排序在O(N ...

  4. java生成sm4算法的对称密钥_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...

    原标题:技术分享丨这是一篇简单的小科普--什么是对称加密算法?(下) 大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理. 本期 ...

  5. cart算法_机器学习十大算法之一——决策树CART算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第23篇文章,我们今天分享的内容是十大数据挖掘算法之一的CART算法. CART算法全称是Classification ...

  6. 对称加密算法_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...

    大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理.(上集回顾) 本期带大家了解一下分组密码的五个模式. 分组密码的模式 首先了 ...

  7. weka使用训练集分类测试集_技术分享

    一.实验目的熟悉weka基本功能和使用方法 学习对数据集进行分类训练并测试 比较不同分类算法对本实验测试集预测的准确率 二.实验环境平台:Weka3.8 数据集:将Weka的data文件夹下默认数据集 ...

  8. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  9. otsu阈值分割算法_图像分割之大津算法(OTSU)

    关注公众号,获取更多信息 引言 最近一直在看图像二值化相关的东西,一直想寻找一个好的方法,能够自适应的设定阈值.这个过程中,发现了OTSU算法,其实这也算是基本的图像处理算法,之前有过接触,但是放过了 ...

最新文章

  1. 放假看片时,一定要检查域名是不是 HTTPS ,不然……
  2. FreeMarker使用记录
  3. ubuntu常见错误–Could not get lock /var/lib/dpkg/lock解决
  4. DBoW2 cmake代码注释
  5. 巧妙解决AJAX跨域问题
  6. 28.Qt获取路径问题
  7. arm linux 自动挂载,ARM-Linux支持并自动挂载U盘
  8. 多品类适合电商美工收藏|品质页面PSD模板
  9. java 重载匹配_关于Java重载方法匹配优先级
  10. FP-Growth算法
  11. PCL使用类成员函数作为pclvisualizer的回调函数
  12. 实验数据 matlab,用MatlAB处理实验数据程序
  13. Vue项目 设置实时时间(年月日 时分秒)两种方法
  14. java 按照拼音排序_java List中元素按照拼音排序
  15. Denoising point sets via L0 minimization
  16. 思考项目 求1+2的2次方+3的3次方+4的4次方+5的5次方+6的6次方的值。(异种循环嵌套)
  17. 用案例说话,教你如何写出有吸引力的开发信以及主题
  18. Spring Boot 启动 出现异常The bean xxx could not be injected as a xx.xxxx because it is a JDK dynami
  19. Matlab之随机森林TreeBagger
  20. Trinity简介(1)--用于无参考基因组的转录组de novo组装

热门文章

  1. Java中的迭代器设计模式–示例教程
  2. 枚举枚举和修改“最终静态”字段的方法
  3. TeamCity工件:HTTP,Ant,Gradle和Maven
  4. MANIFEST.MF和feature.xml版本控制规则
  5. div和div之间画横线_HTML如何在两个div标签中间画一条竖线
  6. 小程序二级页面tabbar_小程序页面推广踩坑记
  7. python执行linux命令返回结果_python执行linux命令的简单示例
  8. java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.LoopTag
  9. linux清空串口接收buff,openwrt解除console对串口的占用
  10. php 数组是否属于迭代器,数组的迭代器属性Iterator介绍