Tôi không chắc chắn tôi sẽ có thể giúp bạn đầy đủ nhưng tôi hy vọng tôi sẽ có thể cung cấp cho bạn một số điểm vào. Nói chung, lời khuyên của tôi cho bạn là tải xuống mã nguồn của Mahout và xem các ví dụ và các lớp đích được triển khai như thế nào. Đây không phải là dễ dàng nhưng bạn nên sẵn sàng rằng Mahout không có cửa ra vào dễ dàng. Nhưng một khi bạn nhập vào thì đường cong học tập sẽ nhanh chóng.
Trước hết, nó phụ thuộc vào phiên bản của Mahout bạn đang sử dụng. Tôi đang sử dụng 0,7 bản thân mình, vì vậy lời giải thích của tôi sẽ liên quan đến 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());
}
gì xảy ra ở đây:
1) Trước tiên, bạn tải các mô hình mà bạn nhận được bằng cách làm trainnb. Mô hình này đã được lưu ở nơi bạn đã chỉ định bằng tham số -o khi gọi trainnb. Mô hình là tệp .bin.
2) StandardNaiveBayesClassifier được tạo ra sử dụng mô hình của bạn
3) RawEntry là lớp tùy chỉnh của tôi mà chỉ là một wrapper xung quanh chuỗi nguyên dữ liệu của tôi. toNaiveBayesTrainingFormar nhận chuỗi Tôi muốn phân loại, loại bỏ nhiễu từ nó dựa trên nhu cầu của tôi và chỉ đơn giản trả về một chuỗi các tính năng 'word1 word2 word3 word4'. Vì vậy, chuỗi thô chưa được phân loại của tôi đã được chuyển đổi thành định dạng phù hợp để phân loại.
4) Bây giờ chuỗi các tính năng cần được mã hóa như Vector Mahout vì phân loại đầu vào duy nhất là trong Vector
5) Vượt qua vector để phân loại - kỳ diệu.
Đây là phần đầu tiên. Bây giờ, classifier trả về cho bạn Vector chứa các lớp (tình cảm trong trường hợp của bạn) với xác suất. Bạn muốn đầu ra cụ thể. Các đơn giản nhất để thực hiện (nhưng tôi giả sử không phải là hiệu quả nhất và phong cách) sẽ làm gì tiếp theo:
1) Bạn tạo MapReduce công việc mà đi qua tất cả các dữ liệu bạn muốn phân loại
2) Đối với mỗi Ví dụ bạn gọi phương thức phân loại (đừng quên làm vài thay đổi không tạo StandardNaiveBayesClassifier cho mọi trường hợp)
3) có vector kết quả phân loại bạn có thể dữ liệu đầu ra trong bất cứ định dạng mà bạn whish trong bản đồ của bạn giảm việc
4) Thiết lập hữu ích ở đây là jC.set ("mapreduce.textoutputformat.separator", ""); trong đó jC là JobConf. Điều này cho phép bạn chọn dấu phân cách cho tệp đầu ra của bạn từ công việc Mapreduce. Trong trường hợp của bạn, đây là ",".
Một lần nữa, tất cả điều này áp dụng cho Mahout 0.7. Không đảm bảo nó sẽ làm việc cho bạn như vậy. Nó làm việc cho tôi mặc dù.
Nói chung, tôi chưa bao giờ làm việc với Mahout từ dòng lệnh và cho tôi Mahout từ Java là con đường để đi.