Nie jestem pewien, czy będę w stanie ci w pełni pomóc, ale mam nadzieję, że będę mógł podać ci kilka punktów. Ogólnie, moja rada dla ciebie polegałaby na pobraniu kodu źródłowego Mahouta i zobaczeniu, jak zaimplementowane są przykłady i klasy docelowe. To nie jest takie łatwe, ale powinieneś być gotowy na to, że Mahout nie ma łatwych drzwi wejściowych. Ale gdy je wprowadzisz, krzywa uczenia się będzie szybka.
Po pierwsze, zależy to od wersji użytego Mahouta. Używam samego 0,7, więc moje wyjaśnienie dotyczy 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());
}
Co się dzieje tutaj:
1) Po pierwsze, należy załadować model, który dostał wykonując trainnb. Ten model został zapisany w miejscu określonym przez parametr -o podczas wywoływania trainnb. Model to plik .bin.
2) StandardNaiveBayesClassifier jest tworzony przy użyciu modelu
3) RawEntry jest mój zwyczaj klasa, która jest po prostu otoki wokół surowego ciąg moich danych. toNaiveBayesTrainingFormar pobiera ciąg, który chcę sklasyfikować, usuwa z niego szum w oparciu o moje potrzeby i po prostu zwraca ciąg funkcji "słowo1 słowo2 słowo3 słowo4". Tak więc mój niesklasyfikowany nieprzetworzony ciąg został przekonwertowany na odpowiedni format dla klasyfikacji.
4) Teraz ciąg funkcji musi być zakodowany jako Kornak wektorowymi, ponieważ wejście jest tylko w klasyfikator Vector
5) Przeciągnij wektor do klasyfikatora - magię.
To jest pierwsza część. Klasyfikator zwraca teraz wektor, który zawiera klasy (uczucia w twoim przypadku) z prawdopodobieństwami. Chcesz konkretnych wyników. Najprostszym wdrożyć (ale nie zakładamy najbardziej wydajny i stylowy) byłoby dalej:
1) utworzyć mapę zmniejszyć pracę, która przechodzi przez wszystkie dane, które chcesz sklasyfikować
2) dla każdego instancja zadzwonić klasyfikować metody (nie zapomnij zrobić kilka zmian, aby nie tworzyć StandardNaiveBayesClassifier dla każdej instancji)
3) Mając na wynik klasyfikacji wektor można dane wyjściowe w dowolnym formacie Państwo zażyczyć w swojej mapie zmniejszyć praca
4) Przydatne tutaj ustawienie to jC.set ("mapreduce.textoutputformat.separator", ""); gdzie jC to JobConf. Pozwala to wybrać separator dla pliku wyjściowego z zadania mapreduce. W twoim przypadku jest to ",".
To samo dotyczy Mahouta 0.7. Żadnych gwarancji, że będzie działać tak jak jest. Dla mnie to zadziałało.
Ogólnie rzecz biorąc, nigdy nie pracowałem z Mahoutem z linii poleceń, a dla mnie Mahout z Java jest drogą do zrobienia.