嗨,
我正在尝试使用 FP-Growth 算法使用 Spark 构建推荐篮分析
我有这些交易
val transactions = sc.parallelize(Seq(
Array("Tuna", "Banana", "Strawberry"),
Array("Melon", "Milk", "Bread", "Strawberry"),
Array("Melon", "Kiwi", "Bread"),
Array("Bread", "Banana", "Strawberry"),
Array("Milk", "Tuna", "Tomato"),
Array("Pepper", "Melon", "Tomato"),
Array("Milk", "Strawberry", "Kiwi"),
Array("Kiwi", "Banana", "Tuna"),
Array("Pepper", "Melon")
))
现在我想要“经常项目”
import org.apache.spark.mllib.fpm.AssociationRules
import org.apache.spark.mllib.fpm.FPGrowth.FreqItemset
val freqItemsets = transactions
.flatMap(xs =>
(xs.combinations(1) ++ xs.combinations(2)).map(x => (x.toList, 1L))
)
.reduceByKey(_ + _)
.map{case (xs, cnt) => new FreqItemset(xs.toArray, cnt)}
val ar = new AssociationRules()
.setMinConfidence(0.4)
val results = ar.run(freqItemsets)
最后我使用关联规则来获取“规则”
results.collect().foreach { rule =>
println("[" + rule.antecedent.mkString(",")
+ "=>"
+ rule.consequent.mkString(",") + "]," + rule.confidence)
}
到目前为止一切都还好,但是接下来我想为每笔交易提供建议……有什么简单的方法可以做到吗?因为我的scala很糟糕
在 RI 做这样的事情
baskets=function(x){
rulesMatchLHS = is.subset(rules@lhs,x)
suitableRules = rulesMatchLHS & !(is.subset(rules@rhs,x))
order.rules = sort(rules[suitableRules], by = "lift")
}
results = sapply(1:length(trans), function(x) baskets(trans[x]))
谢谢你的时间