Sto provando a costruire un classificatore NaiveBayes con MLLib di Spark che prende come input un insieme di documenti.apache spark MLLib: come creare punti etichettati per le caratteristiche delle stringhe?
mi piacerebbe mettere alcune cose come caratteristiche (cioè autori, etichette esplicite, parole chiave impliciti, di categoria), ma guardando the documentation sembra che un LabeledPoint
contiene solo raddoppia, cioè sembra LabeledPoint[Double, List[Pair[Double,Double]]
.
Invece quello che ho come output dal resto del mio codice sarebbe qualcosa di simile LabeledPoint[Double, List[Pair[String,Double]]
.
ho potuto fare la mia propria conversione, ma sembra strano. Come dovrei gestirlo usando MLLib?
Credo che la risposta sia nella classe HashingTF
(ovvero le funzioni di hashing) ma non capisco come funzioni, sembra che occorra una sorta di valore di capacità, ma il mio elenco di parole chiave e argomenti è effettivamente illimitato (o meglio, sconosciuto all'inizio).
grazie, solo un chiarimento in più: se ho capito bene, 'numFeatures' in' HashingTF' è fondamentalmente utilizzato come valore di 'mod' utilizzato per legata al numero di caratteristiche per una data massima? Se è così, non dovrebbe essere semplicemente 'Double.MAX_VALUE'? O è l'idea di usarlo in modo che, ad esempio, possa limitare le diverse caratteristiche a determinati intervalli e limitare le collisioni incrociate? (cioè metti qualche tipo di funzionalità in 1..N e qualche altro in N..2N, avresti delle collisioni dello stesso tipo ma non di tipo incrociato) – riffraff
Sì, il calcolo è simile a 'caratteristiche [hash (funzionalità) % numCaratteristiche] + = 1'. I vettori che vengono creati di solito vengono utilizzati come input per alcuni modelli, quindi usare 'Double.MAX_VALUE' implicherebbe un modello gigantesco. Una delle principali motivazioni del trucco di hashing è la riduzione della memoria. Certamente potresti creare caratteristiche nel modo in cui stai suggerendo, ma non sono sicuro di come valutare i vantaggi di un simile approccio. – mrmcgreg
ah ovviamente, stavo pensando a vettori sparse quindi non ho considerato la dimensione dell'array. Grazie per l'aiuto! – riffraff