Non sono sicuro di poterti aiutare completamente ma spero di riuscire a darti dei punti di accesso. In generale, il mio consiglio per voi sarebbe quello di scaricare il codice sorgente di Mahout e vedere come vengono implementati esempi e classi target. Non è così facile, ma dovresti essere pronto che Mahout non ha porte di accesso facili. Ma una volta entrati, la curva di apprendimento sarà veloce.
Prima di tutto, dipende dalla versione di Mahout che si sta utilizzando. Sto usando 0.7 me stesso, quindi la mia spiegazione sarà relativa a 0.7.
public void classify(String modelLocation, RawEntry unclassifiedInstanceRaw) throws IOException {
Configuration conf = new Configuration();
NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelLocation), conf);
AbstractNaiveBayesClassifier classifier = new StandardNaiveBayesClassifier(model);
String unclassifiedInstanceFeatures = RawEntry.toNaiveBayesTrainingFormat(unclassifiedInstanceRaw);
FeatureVectorEncoder vectorEncoder = new AdaptiveWordValueEncoder("features");
vectorEncoder.setProbes(1); // my features vectors are tiny
Vector unclassifiedInstanceVector = new RandomAccessSparseVector(unclassifiedInstanceFeatures.split(" ").length());
for (String feature: unclassifiedInstanceFeatures) {
vectorEncoder.addToVector(feature, unclassifiedInstanceVector);
}
Vector classificationResult = classifier.classifyFull(unclassifiedInstanceVector);
System.out.println(classificationResult.asFormatString());
}
Quello che succede qui:
1) In primo luogo, si carica il modello che hai facendo trainnb. Questo modello è stato salvato dove specificato usando -o parametro mentre si chiama trainnb. Il modello è .bin file.
2) StandardNaiveBayesClassifier viene creata usando il vostro modello
3) RawEntry è la mia classe personalizzata che è solo un wrapper stringa grezza dei miei dati. toNaiveBayesTrainingFormar prende la stringa che voglio classificare, rimuove il rumore da esso in base alle mie esigenze e restituisce semplicemente una stringa di funzioni 'word1 word2 word3 word4'. Quindi, la mia stringa grezza non classificata è stata convertita in formato applicabile per la classificazione.
4) Ora serie di caratteristiche deve essere codificato come vettore di Mahout perché ingresso classificatore è solo in vettoriale
5) Passare vettore per classificatore - magia.
Questa è la prima parte. Ora, il classificatore ti restituisce Vettore che contiene classi (sentimenti nel tuo caso) con probabilità. Vuoi un output specifico. Il più semplice da implementare (ma io non impegna il più efficiente ed elegante) sarebbe quello di fare dopo:
1) Si crea mappa ridurre posti di lavoro che passa per tutti i dati che si desidera classificare
2) Per ogni esempio si chiama il metodo classificare la sostanza (non dimenticate di fare alcuni cambiamenti non creare StandardNaiveBayesClassifier per ogni istanza)
3) Avere risultati della classificazione di vettore potete dati di uscita in qualsiasi formato manifestare l'interesse nella mappa ridurre lavoro
4) L'impostazione utile qui è jC.set ("mapreduce.textoutputformat.separator", ""); dove jC è JobConf. Questo ti permette di scegliere il separatore per il tuo file di output dal lavoro mapreduce. Nel tuo caso questo è ",".
Ancora, questo vale per Mahout 0.7. Non ci sono garanzie che funzionerà per te così com'è. Ha funzionato per me però.
In generale, non ho mai lavorato con Mahout da riga di comando e per me Mahout da Java è la strada da percorrere.