2015-05-14 13 views
15

Ich schreibe eine Spark-Anwendung und möchte Algorithmen in MLlib verwenden. Im API-Dokument habe ich zwei verschiedene Klassen für denselben Algorithmus gefunden.Unterschied zwischen org.apache.spark.ml.classification und org.apache.spark.mllib.classification

Zum Beispiel gibt es eine Logistische Regression in org.apache.spark.ml.classification auch ein LogisticRegressionwithSGD in org.apache.spark.mllib.classification.

Der einzige Unterschied, den ich finden kann, ist, dass der in org.apache.spark.ml von Estimator übernommen wird und in der Kreuzvalidierung verwendet werden konnte. Ich war ziemlich verwirrt, dass sie in verschiedenen Paketen untergebracht sind. Kennt jemand den Grund dafür? Vielen Dank!

Antwort

22

Es ist JIRA ticket

und Design Doc:

MLlib nun über eine einfache Auswahl von Algorithmen des maschinellen Lernens umfasst, zum Beispiel, logistische Regression, Entscheidungsbäume, der kleinsten Quadrate abwechselnd, und k-Mittel. Der aktuelle Satz von APIs enthält mehrere Konstruktionsfehler, die uns davon abhalten, uns auf Adresse praktische Maschinen lernen Pipelines, machen MLlib selbst ein skalierbares Projekt.

Die neue Gruppe von APIs wird unter org.apache.spark.ml und o.a.s.mllib wird veraltet, wenn wir alle Features auf o.a.s.ml migrieren.

+0

Hallo Yijie, vielen Dank! Wie ich es verstehe, kann ich, wenn ich eine Kreuzvalidierung für Algorithmen durchführen möchte, die sich in o.a.s.mllib befinden, nur manuell Parameter setzen und mehrere Male ausführen, anstatt die Cross-Validator-Methode zu verwenden. Hast du einen besseren Weg es zu tun? – ailzhang

+0

@ailzhang, könntest du das als eine andere Frage posten und sehen, ob jemand anderes helfen kann :) Ich weiß wenig über Mllib –

+0

ok ~ danke für deine Hilfe! – ailzhang

6

The spark mllib guide sagt:

spark.mllib die ursprüngliche API oben auf RDDs gebaut enthält.

spark.ml bietet eine API auf höherer Ebene, die auf DataFrames zum Erstellen von ML-Pipelines basiert.

und

spark.ml Verwendung wird empfohlen, da mit Datenrahmen der API vielseitiger und flexibler ist. Aber wir werden weiterhin spark.mllib zusammen mit der Entwicklung von spark.ml unterstützen. Benutzer sollten mit den Funktionen von spark.mlib vertraut sein und mehr Funktionen erwarten. Entwickler sollten neue Algorithmen zu spark.ml hinzufügen, wenn sie gut zum ML-Pipeline-Konzept passen, z. B. Feature-Extraktoren und Transformatoren.

Ich denke, der Doc erklärt es sehr gut.