2016-07-20 18 views
-1

Ich möchte Matrix-Factoring (mit ALS in MLlib um genau zu sein) für Produktempfehlungen, wo ich keine Bewertungen, aber Anzahl der Käufe (implizite Informationen, Sparse-Matrix). Vor dem Training möchte ich den Datensatz nach Kunden standardisieren (Zeile in der Matrix, wobei Spalten Produkte sind und Schnittpunkt ein Betrag ist). Matrix hat wenige Millionen Zeilen und mehrere zehntausend Spalten. Daher möchte ich RDD so oft wie möglich verwenden.Standardisierung von Werten in Sparse-Matrix RDD

Meine Daten werden in der Liste von Tupeln gespeichert:

(int, int, int) 

[(Client1, Product1, amount) 
(Client1, Product2, amount) 
(Client2, Product1, amount) 
(Client2, Product3, amount)] 

Ich mag Menge an Produkten gekauft von Client standardisieren würde. Ich habe über die Transformation von groupByKey nachgedacht, weiß aber nicht, wohin ich von hier aus gehen soll.

EDIT: Das Hauptproblem mit dem Ansatz, den ich genommen habe die Verwendung der RDDs und ALS wurde umgesetzt mit RDDs (erhältlich im mllib Paket) zu arbeiten, statt Haupt-ML-Bibliothek, den Datenrahmen (erhältlich in verwendet das ml-Paket). Da die geschachtelte Umwandlung in RDDs nicht verfügbar ist, hat die Verwendung von DataFrames erheblich geholfen.

+0

Was für Standardisierung würden Sie sich bewerben? – jtitusj

Antwort

0

Versuchen Sie folgendes:

>>> from pyspark.mllib.linalg.distributed import * 
>>> from pyspark.mllib.linalg.distributed import * 
>>> 
>>> cm = CoordinateMatrix(rdd.map(lambda (c, p, a): MatrixEntry(c, p, a))) 
>>> irm = cm.toIndexedRowMatrix() 
>>> idxs = irm.rows.map(lambda row: row.index) 
>>> vcs = irm.rows.map(lambda row: row.vector) 
>>> 
>>> nzr = Normalizer(1) 
>>> rows = idxs.zip(nzr.transform(vcs)).map(lambda (index, vector): IndexedRow(index, vector)) 
>>> normalized = IndexedRowMatrix(rows).toCoordinateMatrix().entries. 
Verwandte Themen