Come possiamo ottenere i primi 10 prodotti consigliati in PySpark. Capisco che ci sono metodi come recommendProducts per raccomandare prodotti per un singolo utente e predireTutto per prevedere la valutazione per la coppia {user, item}. Ma esiste un modo efficace per pubblicare i primi 10 articoli per ciascun utente per tutti gli utenti?Come raccomandare i primi 10 prodotti in Spark ALS per tutti gli utenti?
risposta
Ho scritto questa funzione che moltiplica le caratteristiche utente e le caratteristiche del prodotto per partizioni in modo che venga distribuito, quindi ottiene le valutazioni per ciascun prodotto per utente e le ordina in base alla valutazione e genera l'elenco di 8 prodotti consigliati.
#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 fornisce 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)))]
In caso di valutazioni implicite, in cui gli utenti non valutano esplicitamente i prodotti, è possibile che non si desideri filtrare i dati di test. – hwaxxer
Ma l'utente ha già eseguito un'azione (visualizzare, acquistare, qualsiasi cosa) su quell'elemento, vorremmo raccomandarlo a lui/lei? – tokland
Non possiamo presumere che qualsiasi elemento "valutato" debba essere rimosso dai risultati. Un utente che interagisce con un oggetto può essere un forte indicatore del fatto che gli piace l'oggetto e che dovrebbe essere raccomandato a loro, indipendentemente dal fatto che lo abbiano già visto. La logica aziendale pertinente alle raccomandazioni, come il filtraggio di determinati articoli, è probabilmente la migliore da fare al di fuori del motore di raccomandazione. Altre API ci permettono di farlo, come [predictAll] (http://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#pyspark.mllib.recommendation.MatrixFactorizationModel.predictAll). – hwaxxer
- 1. Apache Spark ALS raccomandazioni approccio
- 2. Come aggiornare Spark MatrixFactorizationModel per ALS
- 3. Linq to SQL: ottieni i primi 10 prodotti più ordinati
- 4. Prestashop tutti i prodotti
- 5. Come abilitare tutti i prodotti in tutti i negozi
- 6. registro primi 10 in git
- 7. Come salvare un'impostazione per Tutti gli utenti in Vista
- 8. Come rimuovere tutti i prodotti del catalogo in Magento
- 9. Come ottenere i primi 10 valori in un file JSON
- 10. Django Ottieni tutti gli utenti
- 11. come ottenere tutti i prodotti della categoria amazon
- 12. Come installare le scorciatoie di programma per tutti gli utenti?
- 13. Come selezionare i primi 10 elementi dal database usando SQL?
- 14. Come rimuovere i primi 10 caratteri da una stringa?
- 15. Come richiedere SSL per tutti gli utenti remoti
- 16. Elenco di tutti gli utenti e gruppi
- 17. Identità ASP.net 2.1 Ottieni tutti gli utenti con i ruoli
- 18. Come posso trovare tutti i prodotti senza immagini in Magento?
- 19. Come ottenere tutti gli utenti in un ruolo specifico?
- 20. Come ottenere tutti gli utenti di gruppo in dotnetnuke
- 21. Oracle - concedere privilegi a tutti gli utenti
- 22. Fare clic una volta - Tutti gli utenti
- 23. Come ottenere un elenco di tutti gli utenti in SharePoint
- 24. Come recuperare i primi due prodotti per ogni tipo di prodotto?
- 25. ASP.NET MVC Elenca tutti gli utenti
- 26. limitare tutti gli utenti a 1 sessione
- 27. CSS seleziona tutti gli elementi figli tranne i primi due e gli ultimi due
- 28. Come aumentare i fattori di matrice nei consigli di Spark ALS?
- 29. Come aggiungere il file di configurazione al classpath di tutti gli esecutori Spark in Spark 1.2.0?
- 30. vi rimangono solo i primi 10 caratteri di una colonna
Con Scala si può usare 'recommendProductsForUser', ma in questo momento questa funzione non è esposto attraverso PySpark API. – zero323