2016-03-27 17 views
5

Tôi đang ở giữa việc tái cấu trúc mã của mình để tận dụng lợi thế của DataFrames, Estimators, and Pipelines. Ban đầu tôi đã sử dụng MLlib Multiclass LogisticRegressionWithLBFGS trên RDD[LabeledPoint]. Tôi thích học tập và sử dụng API mới, nhưng tôi không chắc chắn làm thế nào để lưu mô hình mới của tôi và áp dụng nó trên dữ liệu mới.Spark ML - Lưu OneVsRestModel

Hiện tại, triển khai ML của LogisticRegression chỉ hỗ trợ phân loại nhị phân. Tôi, thay vì sử dụng OneVsRest như vậy:

val lr = new LogisticRegression().setFitIntercept(true) 
val ovr = new OneVsRest() 
ovr.setClassifier(lr) 
val ovrModel = ovr.fit(training) 

bây giờ tôi muốn lưu OneVsRestModel của tôi, nhưng điều này dường như không được hỗ trợ bởi các API. Tôi đã thử:

ovrModel.save("my-ovr") // Cannot resolve symbol save 
ovrModel.models.foreach(_.save("model-" + _.uid)) // Cannot resolve symbol save 

Có cách nào để lưu điều này, vì vậy tôi có thể tải ứng dụng mới để tạo dự đoán mới không?

Trả lời

5

Spark 2.0.0

OneVsRestModel thực hiện MLWritable vì thế ta có thể lưu nó trực tiếp. Phương pháp được hiển thị bên dưới có thể vẫn hữu ích để lưu riêng từng mô hình.

Spark < 2.0.0

Vấn đề ở đây là models trả về một Array của ClassificationModel[_, _]] không phải là một Array của LogisticRegressionModel (hoặc MLWritable). Để làm cho nó làm việc bạn sẽ phải được cụ thể về các loại:

import org.apache.spark.ml.classification.LogisticRegressionModel 

ovrModel.models.zipWithIndex.foreach { 
    case (model: LogisticRegressionModel, i: Int) => 
    model.save(s"model-${model.uid}-$i") 
} 

hoặc là chung chung hơn:

import org.apache.spark.ml.util.MLWritable 

ovrModel.models.zipWithIndex.foreach { 
    case (model: MLWritable, i: Int) => 
    model.save(s"model-${model.uid}-$i") 
} 

Thật không may như bây giờ (Spark 1.6) OneVsRestModel không thực hiện MLWritable nên nó không thể được cứu một mình.

Note:

Tất cả các model int OneVsRest dường như sử dụng cùng uid do đó chúng ta cần một chỉ số rõ ràng. Nó cũng sẽ hữu ích để xác định mô hình sau này.

+1

Tôi ước tôi có thể +2 mục này. Không chỉ là chính xác những gì tôi cần, nó làm cho công việc tính toán xác suất thô dễ dàng hơn rất nhiều. Tôi nghĩ tôi sẽ phải tùy chỉnh src. Cảm ơn! –

+0

@ zero323 là có một phiên bản pyspark của câu trả lời của bạn? Đang cố gắng tìm cách để lưu các mô hình pyspark.ml – ajkl

+0

@AjinkyaKale Trong phiên bản 1.6? – zero323

Các vấn đề liên quan