Spark FPGrowth (Frequent Pattern Mining)
给定交易数据集,FP增长的第一步是计算项目频率并识别频繁项目。与为同样目的设计的类似Apriori的算法不同,FP增长的第二步使用后缀树(FP-tree)结构来编码事务,而不会显式生成候选集,生成的代价通常很高。第二步之后,可以从FP树中提取频繁项集。
import org.apache.spark.sql.SparkSession
import org.apache.spark.mllib.fpm.FPGrowth
import org.apache.spark.rdd.RDD val spark = SparkSession
.builder()
.appName("Spark SQL basic example")
.config("spark.some.config.option", "some-value")
.getOrCreate() // For implicit conversions like converting RDDs to DataFrames
import spark.implicits._ val data = List(
"1,2,5",
"1,2,3,5",
"1,2").toDF("items")
data: org.apache.spark.sql.DataFrame = [items: string] // 注意每行,头部和尾部的[中括号
data.rdd.map { s => s.toString() }.collect().take(3)
res20: Array[String] = Array([1,2,5], [1,2,3,5], [1,2]) val transactions: RDD[Array[String]] = data.rdd.map {
s =>
val str = s.toString().drop(1).dropRight(1)
str.trim().split(",")
} val fpg = new FPGrowth().setMinSupport(0.5).setNumPartitions(8) val model = fpg.run(transactions) /* model.freqItemsets.collect().foreach { itemset =>
println(itemset.items.mkString("[", ",", "]") + ", " + itemset.freq)
}*/ val freqItemSets = model.freqItemsets.map { itemset =>
val items = itemset.items.mkString(",")
val freq = itemset.freq
(items, freq)
}.toDF("items", "freq")
freqItemSets: org.apache.spark.sql.DataFrame = [items: string, freq: bigint] freqItemSets.show
+-----+----+
|items|freq|
+-----+----+
| 1| 3|
| 2| 3|
| 2,1| 3|
| 5| 2|
| 5,2| 2|
|5,2,1| 2|
| 5,1| 2|
+-----+----+ val minConfidence = 0.6
minConfidence: Double = 0.6 /*model.generateAssociationRules(minConfidence).collect().foreach { rule =>
println(
rule.antecedent.mkString("[", ",", "]")
+ " => " + rule.consequent.mkString("[", ",", "]")
+ ", " + rule.confidence)
}*/ // 根据置信度生成关联规则
val Rules = model.generateAssociationRules(minConfidence)
Rules: org.apache.spark.rdd.RDD[org.apache.spark.mllib.fpm.AssociationRules.Rule[String]] = MapPartitionsRDD[129] at filter at AssociationRules.scala:80 val df = Rules.map { s =>
val L = s.antecedent.mkString(",")
val R = s.consequent.mkString(",")
val confidence = s.confidence
(L, R, confidence)
}.toDF("left_collect", "right_collect", "confidence")
df: org.apache.spark.sql.DataFrame = [left_collect: string, right_collect: string ... 1 more field] df.show
+------------+-------------+------------------+
|left_collect|right_collect| confidence|
+------------+-------------+------------------+
| 2| 5|0.6666666666666666|
| 2| 1| 1.0|
| 5,2| 1| 1.0|
| 5| 2| 1.0|
| 5| 1| 1.0|
| 1| 5|0.6666666666666666|
| 1| 2| 1.0|
| 2,1| 5|0.6666666666666666|
| 5,1| 2| 1.0|
+------------+-------------+------------------+
Spark FPGrowth (Frequent Pattern Mining)的更多相关文章
- 八、频繁模式挖掘Frequent Pattern Mining
频繁模式挖掘(Frequent Pattern Mining): 频繁项集挖掘是通常是大规模数据分析的第一步,多年以来它都是数据挖掘领域的活跃研究主题.建议用户参考维基百科的association r ...
- Frequent Pattern 挖掘之一(Aprior算法)(转)
数据挖掘中有一个很重要的应用,就是Frequent Pattern挖掘,翻译成中文就是频繁模式挖掘.这篇博客就想谈谈频繁模式挖掘相关的一些算法. 定义 何谓频繁模式挖掘呢?所谓频繁模式指的是在样本数据 ...
- Frequent Pattern 挖掘之二(FP Growth算法)
Frequent Pattern 挖掘之二(FP Growth算法) FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断 ...
- 原创:协同过滤之spark FP-Growth树应用示例
上一篇博客中,详细介绍了UserCF和ItemCF,ItemCF,就是通过用户的历史兴趣,把两个物品关联起来,这两个物品,可以有很高的相似度,也可以没有联系,比如经典的沃尔玛的啤酒尿布案例.通过Ite ...
- Frequent Pattern 挖掘之二(FP Growth算法)(转)
FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对.为了达到这样的效果,它采用了一种简洁的数据结 ...
- Frequent Pattern (FP Growth算法)
FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对.为了达 到这样的效果,它采用了一种简洁的数据 ...
- 论文总结(Frequent Itemsets Mining With Differential Privacy Over Large-Scale Data)
一.论文目标:将差分隐私和频繁项集挖掘结合,主要针对大规模数据. 二.论文的整体思路: 1)预处理阶段: 对于大的数据集,进行采样得到采样数据集并计算频繁项集,估计样本数据集最大长度限制,然后再缩小源 ...
- Space Time Pattern Mining Tools(时空模式挖掘工具)
时空模式挖掘工具 # Process: 局部异常值分析 arcpy.LocalOutlierAnalysis_stpm("", "", 输出要素, " ...
- 《Spark 官方文档》机器学习库(MLlib)指南
spark-2.0.2 机器学习库(MLlib)指南 MLlib是Spark的机器学习(ML)库.旨在简化机器学习的工程实践工作,并方便扩展到更大规模.MLlib由一些通用的学习算法和工具组成,包括分 ...
随机推荐
- Mysql常用语句/group by 和 having子句
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ explain: ~~~~~~~~~~~~~~~~~ ...
- u3d不显示阴影的处理方法
正常情况下都会显示的,如果没有显示,尝试以下几种方案: 1)缩小模型看一看 2)旋转灯光试试,看是否有阴影 3)检查阴影设置 菜单栏Edit –> Project Settings –> ...
- NLP 第10章 基于深度学习的NLP 算法
- Win10系统的DELL平板如何重装WIN10系统
首先参考"Win10系统的SurfacePro4如何重装系统-1 SurfacePro专用的PE"这篇文章,做一个WIN10平板专用的PE 然后开机按F2可以进入BIOS设置,如果 ...
- np.percentile获取中位数、百分位数
给定一个递增数组a,求它的中位数. np.percentile(a,50) 中位数就是50%处的数字,也可以获得0%.100%处的数字,0%处的数字就是第一个数字,100%处的数字就是最后一个数字.1 ...
- Python import语句导入模块语法[转]
Python import语句导入模块语法 社区推荐:掘金是国内最活跃的技术社区,我们每日有优质Python开发实例分享,海量python开源库推送.来掘金,和更多懂技术的小伙伴交流. pytho ...
- 单片机成长之路(51基础篇) - 012 MCS-51单片机控制详解–TMOD T2MOD
TMOD:工作方式控制寄存器 寄存器地址89H,不可位寻址. 位序 B7 B6 B5 B4 B3 B2 B1 B0 位符号 GATE C/T M1 M0 GATE C/T M1 M0 GATE——门控 ...
- git上传本地Intellij idea 项目到码云的git仓库中
.安装git客户端 Window下安装git客户端. 二.配置Intellij idea中的Git/ GitHub 打开Preference-- Version Control. 下拉选择Github ...
- 禅道项目管理系统整合Selenium IDE的思路
前两天说用过Selenium IDE产生了一些想法,这里做一些整理. 传统的测试人员管理测试用例,基本都是用Excel.这没什么不好的,也没什么好的.如果通过管理系统来管理用例,相对来说,少了一些简便 ...
- hdoj:2052
#include <iostream> #include <string> using namespace std; int main() { int n, m; while ...