ハイ、
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)
}
今まではすべてOKでしたが、次は取引ごとに推奨事項を述べたいと思います...それを行う簡単な方法はありますか? 私の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]))
御時間ありがとうございます