程一舰
数据技术处
我们常说我们生活在信息时代,实际上,我们更多的还是生活在数据时代。因为从过去到现在累积了大量的数据,对数据的挖掘和分析也仅是从最近几年大数据和人工智能技术的发展而兴起。我们对现有数据价值的利用还远低于数据本身拥有的价值。随着数据在党的十九届四中全会中与劳动、资本、土地、知识、技术、管理等一起被列为生产要素,数据价值的挖掘将会越来越深入。数据挖掘在《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,通常性能要好两个数量级以上。
四、总结
数据挖掘中关于关联规则或者频繁模式挖掘类的算法,也是我们日常生活中经常用到的算法。数据挖掘还有很多有趣的算法, 这些算法能让我们更好的从数据从挖掘价值信息。同时,大数据平台也将一如既往的为各种数据挖掘类应用提供算力支持,为我行金融科技发展打造坚持的大数据平台支撑。