0

Hy,Korbanalyse mit Spark-FP-Growth

Ich versuche, eine Empfehlung Korbanalyse mit Funken mit FP-Growth-Algorithmus

Ich habe diese Transaktionen

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") 
)) 

Jetzt zu bauen I wollen "frequent Punkt"

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) 

Ich bin mit Assoziationsregeln schließlich die „Regeln“ Ok, bis jetzt

results.collect().foreach { rule => 
    println("[" + rule.antecedent.mkString(",") 
    + "=>" 
    + rule.consequent.mkString(",") + "]," + rule.confidence) 
} 

Alles zu bekommen, aber nächstes möchte ich Empfehlung für jede Transaktion geben ... Es gibt eine einfache Möglichkeit, das zu tun? sehr schlecht, weil mein scala

ist

In RI tun so etwas wie dieses

baskets=function(x){ 
    rulesMatchLHS = is.subset([email protected],x) 
    suitableRules = rulesMatchLHS & !(is.subset([email protected],x)) 
    order.rules = sort(rules[suitableRules], by = "lift") 
} 

results = sapply(1:length(trans), function(x) baskets(trans[x])) 

Dank für Ihre Zeit

+0

Ich bin nicht wirklich sicher, wonach Sie fragen. – eliasah

+0

Beispiel, für Korb 1 ("Thunfisch", "Banane", "Erdbeere"), welches Produkt empfehle ich für diesen Kunden? – Kardu

Antwort

0

Nun, nachdem Sie Ihre Regeln erzeugt, sie wie etwas wie folgt aussehen: lhs = > rhs (Vertrauen) oder zum Beispiel in mehr Details:

("Thunfisch", "Banane") => ("Erdbeere") (Vertrauen)

N ow Sie werden eine Liste dieser Regeln haben, beginnend mit einem Minimum an Vertrauen. Danach möchten Sie die Liste der Regeln verwenden, um Vorhersagen für bestimmte Körbe zu treffen, damit ein neuer Korb kommt.

Sie werden die Regeln finden müssen, die am besten zu den Artikeln im neuen Korb passen, bestimmten Wert oder Punktzahl für diesen Abgleich, sagen wir, ein neuer Korb mit ("Thunfisch", "Banane") passt perfekt zu Regel oben (Übereinstimmung mit der linken Seite der Regel), aber wenn weniger Elemente übereinstimmen, sollte die Punktzahl niedriger sein. Sie können auch eine Mindestpunktzahl festlegen, um eine Empfehlung auszulösen. Sobald Sie eine Übereinstimmung mit einer Regel erhalten, empfehlen Sie die rechten Seitenelemente der Regeln.

Ich hoffe, das ist klar, Sie haben alles, was Sie tun müssen, dass auf den Code, den Sie bereitgestellt haben.