Wie können wir Top 10 empfohlene Produkte in PySpark bekommen. Ich verstehe, dass es Methoden wie recommendProducts gibt, um Produkte für einen einzelnen Benutzer zu empfehlen, und predictAll, um die Bewertung für das Paar {user, item} vorherzusagen. Aber gibt es eine effiziente Möglichkeit, die Top 10 Elemente für jeden Benutzer für alle Benutzer auszugeben?Wie empfehlen Top 10 Produkte in Spark ALS für alle Benutzer?
Antwort
Ich schrieb diese Funktion, die Benutzerfunktionen und Produktfunktionen durch Partitionen vervielfacht, so dass es verteilt wird, dann erhält es die Bewertungen für jedes Produkt nach Benutzer und sortiert sie nach Bewertung und gibt die Liste der 8 Top empfohlenen Produkte.
#Collect product feature matrix
productFeatures = bestModel.productFeatures().collect()
productArray=[]
productFeaturesArray=[]
for x in productFeatures:
productArray.append(x[0])
productFeaturesArray.append(x[1])
matrix=np.matrix(productFeaturesArray)
productArrayBroadCast=sc.broadcast(productArray)
productFeaturesArraybroadcast=sc.broadcast(matrix.T)
def func(iterator):
userFeaturesArray = []
userArray = []
for x in iterator:
userArray.append(x[0])
userFeaturesArray.append(x[1])
userFeatureMatrix = np.matrix(userFeaturesArray)
userRecommendationArray = userFeatureMatrix*(productFeaturesArraybroadcast.value)
mappedUserRecommendationArray = []
#Extract ratings from the matrix
i=0
for i in range(0,len(userArray)):
ratingdict={}
j=0
for j in range(0,len(productArrayBroadcast.value)):
ratingdict[str(productArrayBroadcast.value[j])]=userRecommendationArray.item((i,j))
j=j+1
#Take the top 8 recommendations for the user
sort_apps=sorted(ratingdict.keys(), key=lambda x: x[1])[:8]
sort_apps='|'.join(sort_apps)
mappedUserRecommendationArray.append((userArray[i],sort_apps))
i=i+1
return [x for x in mappedUserRecommendationArray]
recommendations=model.userFeatures().repartition(2000).mapPartitions(func)
PySpark> = 1.6.0 bietet MatrixFactorizationModel.recommendProductsForUsers:
>> model.recommendProductsForUsers(3).take(2)
[(1,
(Rating(user=1, product=2975, rating=0.003626774788608227),
Rating(user=1, product=1322, rating=0.002494393082165332),
Rating(user=1, product=8746, rating=0.002176665942528324))),
(2,
(Rating(user=2, product=4060, rating=0.011020947406565042),
Rating(user=2, product=2332, rating=0.009479319983658458),
Rating(user=2, product=1979, rating=0.004587168057824856)))]
Bei impliziten Bewertungen, bei denen Benutzer Produkte nicht explizit bewerten, möchten Sie möglicherweise keine Testdaten herausfiltern. – hwaxxer
Aber der Benutzer hat bereits eine Aktion (Ansicht, Kauf, was auch immer) an diesem Objekt ausgeführt, möchten Sie es ihm/ihr empfehlen? – tokland
Wir können nicht davon ausgehen, dass irgendein "bewerteter" Gegenstand aus den Ergebnissen entfernt werden muss. Ein Benutzer, der mit einem Gegenstand interagiert, kann ein starker Indikator dafür sein, dass er den Gegenstand mag und dass er ihnen empfohlen werden sollte, unabhängig davon, ob sie ihn vorher gesehen haben oder nicht. Die Geschäftslogik zu den Empfehlungen, z. B. das Ausfiltern bestimmter Elemente, wird wahrscheinlich am besten außerhalb der Empfehlungs-Engine ausgeführt. Andere APIs lassen uns dies tun, wie [predictAll] (http://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#pyspark.mllib.recommendation.MatrixFactorizationModel.predictAll). – hwaxxer
- 1. Wie am ähnlichsten Benutzer empfehlen Spark-ML mit
- 2. Linq to SQL: Get Top 10 am meisten bestellten Produkte
- 3. MYSQL Abfrage für die Top 10 Benutzer pro Standort
- 4. SQL wählen Top 10 für jedes Jahr
- 5. pgsql -Zeigt Top 10 Produkte die Verkäufe und andere Produkte als "andere" und seine Summe der Verkäufe
- 6. Select Top (alle bis 10) von ... in Microsoft Access
- 7. Top 10 des Kunden - Gesamt
- 8. Top 10 negative Testliste
- 9. Apache Spark-ALS Empfehlungen nähern
- 10. Prestashop alle Produkte
- 11. Benutzer zentriert Top-Liste
- 12. Oracle SELECT TOP 10 Datensätze
- 13. Wie bewertet man alle Benutzer-Produkt-Kombinationen im Spark MatrixFactorizationModel?
- 14. Spark sql top n pro Gruppe
- 15. MySQL - Top 10 pro Tag
- 16. "Weekly Top 10" Datenbankdesign Ausgabe
- 17. Wie bekomme ich Top 10 und ORDER BY() von COUNT()
- 18. Wie bekomme ich TOP 10 in MySQL mit kombinierten Datenzeilen?
- 19. Benutzer, Warenkorb und Produkte Eloquent
- 20. Kann nicht alle Produkte anzeigen
- 21. Wie Filter Preisspanne für Produkte in Django?
- 22. Gemeinsame Scroll-Top-Funktion für alle Menü
- 23. Validierung für mehr als 10
- 24. WooCommerce Holen Sie sich alle Produkte als ID Name Paar
- 25. Wie extrahiert man Top 10 Daten in d3.js?
- 26. t-SQL Top 10 Datensätze für jede Gruppe zu finden
- 27. Wie alle Produkte mit Join in mysql anzuzeigen
- 28. Spark DB Insertion unter 10 Stunden für 60Gb Daten mongo
- 29. Gruppe von Benutzer-ID in Spark-
- 30. Wie installiert man Anaconda Python für alle Benutzer?
Mit Scala können Sie 'recommendProductsForUser' verwenden, aber in diesem Moment ist diese Funktion nicht durch PySpark API ausgesetzt. – zero323