2014-09-03 16 views
9

Vì vậy, tôi đang xây dựng một mô hình phản hồi recommender ngầm với Spark 1.0.0 và tôi đang cố gắng để làm theo tấm gương họ có trên trang lọc cộng tác của họ: http://spark.apache.org/docs/latest/mllib-collaborative-filtering.html#explicit-vs-implicit-feedbackSpark MLlib - Collaborative Filtering Implicit Thức ăn

Và tôi thậm chí có dataset kiểm tra nạp lên mà họ tham khảo trong ví dụ: http://codesearch.ruethschilling.info/xref/apache-foundation/spark/mllib/data/als/test.data

Tuy nhiên khi tôi cố gắng để chạy các mô hình phản hồi ngầm: alpha val = 0.01 mô hình val = ALS.trainImplicit (xếp hạng, cấp bậc, numIterations, alpha)

(xếp hạng là xếp hạng chính xác từ bộ dữ liệu và xếp hạng của họ = 10, numIterations = 20) Tôi nhận được lỗi sau:

scala> val model = ALS.trainImplicit(ratings, rank, numIterations, alpha) 
<console>:26: error: overloaded method value trainImplicit with alternatives: 
(ratings: org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating],rank: Int,iterations: Int)org.apache.spark.mllib.recommendation.MatrixFactorizationModel <and> 
(ratings: org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating],rank: Int,iterations: Int,lambda: Double,alpha: Double)org.apache.spark.mllib.recommendation.MatrixFactorizationModel <and> 
(ratings: org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating],rank: Int,iterations: Int,lambda: Double,blocks: Int,alpha: Double)org.apache.spark.mllib.recommendation.MatrixFactorizationModel <and> 
(ratings: org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating],rank: Int,iterations: Int,lambda: Double,blocks: Int,alpha: Double,seed: Long)org.apache.spark.mllib.recommendation.MatrixFactorizationModel 
cannot be applied to (org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating], Int, Int, Double) 
val model = ALS.trainImplicit(ratings, rank, numIterations, alpha) 

Điều thú vị là, mô hình này chỉ chạy tốt khi không làm trainImplicit (ví dụ: ALS.train)

Trả lời

4

Ví dụ có vẻ không đồng bộ với việc triển khai vì không có quá tải trainImplicit với bốn thông số - đó là thông báo lỗi cho bạn biết. Tuy nhiên, nếu bạn nhìn vào Scala source code for ALS bạn sẽ thấy rằng tình trạng quá tải ba tham số được thực hiện trong điều khoản của tình trạng quá tải Sáu tham số qua một số 'con số kỳ diệu':

def trainImplicit(ratings: RDD[Rating], rank: Int, iterations: Int) 
    : MatrixFactorizationModel = { 
    trainImplicit(ratings, rank, iterations, 0.01, -1, 1.0) 
} 

Điều này cho thấy rằng 0.01 là một giá trị mặc định cho đàng hoàng lambda. (Có lẽ tốt để kiểm tra với một ai đó có một sự hiểu biết sâu sắc hơn về ML.) Điều này có thể cung cấp cho bạn đủ thông tin để đặt cùng một cuộc gọi hợp lý đến quá tải thông số năm hoặc sáu. (Tất nhiên, nếu bạn biết đủ để chọn giá trị tốt hơn, đó là tuyệt vời!)

Ví dụ:

val model = ALS.trainImplicit(ratings, rank, numIterations, 0.01, alpha) 

hoặc

val model = ALS.trainImplicit(ratings, rank, numIterations, 0.01, -1, alpha) 

Cuối cùng, bạn có thể không nhận ra rằng có khá tốt API documentaiton for ALS.

+0

Hoàn hảo, tính toán 'số ma thuật' có vẻ hoạt động tốt! Cảm ơn rất nhiều vì sự giúp đỡ!! – atellez

+0

Có 0,01 là một giá trị mặc định tốt cho lambda. –

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