2015-05-14 8 views
15

Sto scrivendo un'applicazione spark e vorrei utilizzare algoritmi in MLlib. Nel documento API ho trovato due classi diverse per lo stesso algoritmo.Differenza tra org.apache.spark.ml.classification e org.apache.spark.mllib.classification

Ad esempio, esiste una LogisticRegression in org.apache.spark.ml.classification anche una LogisticRegressionwithSGD in org.apache.spark.mllib.classification.

L'unica differenza che posso trovare è che quello in org.apache.spark.ml è ereditato da Estimator e poteva essere utilizzato nella convalida incrociata. Ero abbastanza confuso dal fatto che fossero messi in pacchetti diversi. Qualcuno ne sa il motivo? Grazie!

risposta

22

È JIRA ticket

E Da Design Doc:

MLlib ora copre una selezione di base di algoritmi di apprendimento della macchina, ad esempio, la regressione logistica, alberi decisionali, alternando minimi quadrati, e k-means. L'attuale serie di API contiene diversi difetti di progettazione che ci impediscono di andare avanti alle linee di produzione pratiche per l'apprendimento delle macchine , rendono MLlib stesso un progetto scalabile.

Il nuovo gruppo di API vivrà sotto org.apache.spark.ml e o.a.s.mllib verrà ritirato dopo la migrazione di tutte le funzionalità su o.a.s.ml.

+0

Ciao Yijie, grazie mille! Come ho capito, se voglio eseguire la convalida incrociata sugli algoritmi che si trovano in o.a.s.mllib, posso solo impostare i parametri manualmente ed eseguire diverse volte invece di usare il metodo Cross-validator. Hai un modo migliore per farlo? – ailzhang

+0

@ailzhang, potresti postare questa come un'altra domanda e vedere se qualcun altro può aiutarti :) So poco di Mllib –

+0

ok ~ grazie per il tuo aiuto! – ailzhang

6

Il spark mllib guide dice:

spark.mllib contiene l'API originale costruito sopra RDDs.

spark.ml fornisce API di livello superiore basate su DataFrames per la costruzione di pipeline ML.

e

Uso spark.ml è preferibile perché con DataFrames l'API è più versatile e flessibile. Ma continueremo a supportare spark.mllib insieme allo sviluppo di spark.ml. Gli utenti dovrebbero sentirsi a proprio agio usando le funzionalità spark.mllib e si aspettano ulteriori funzionalità. Gli sviluppatori dovrebbero contribuire con nuovi algoritmi a spark.ml se si adattano bene al concetto di pipeline ML, ad esempio estrattori di funzionalità e trasformatori.

Penso che il doc lo spieghi molto bene.