让我们从您的问题定义开始:“一个好的策略首先建立关系,然后计算出现次数”。
粗略地说,就是购物篮分析算法使用的基本策略。然而,像Apriori或 FPGrowth 这样的算法专门设计用于分析此类数据集(大规模)并推断所有篮子中项目之间的固有关联规则。我的建议是使用其中一种来收集所购买物品之间的关系,而不是重新发明它们;特别是因为您将面临这些算法已经解决的许多难题(即生成篮子项目组合时的大搜索空间)。
您可以使用多种库或语言中的任何一种来执行此操作,即 R、Python 等。使用 MLLib 在 Spark 中执行此操作非常简单,您的工作流程类似于:1)选择一种算法,例如 FPGrowth;2)准备您的数据以适应 FPGrowth 要求的格式(每笔交易应该是一个篮子项目的数组);3)运行FPGrowth并输出其频繁项集。
Spark 的网站上有一个很好的例子:
import org.apache.spark.mllib.fpm.FPGrowth
import org.apache.spark.rdd.RDD
val data = sc.textFile("data/mllib/sample_fpgrowth.txt")
//prepare the data to use with FPGrowth
val transactions: RDD[Array[String]] = data.map(s => s.trim.split(' '))
//create and run the model
val fpg = new FPGrowth()
.setMinSupport(0.2)
.setNumPartitions(10)
val model = fpg.run(transactions)
//output the frequent itemsets (items frequently bought together)
model.freqItemsets.collect().foreach { itemset =>
println(itemset.items.mkString("[", ",", "]") + ", " + itemset.freq)
}