2014-09-03 2 views
9

그래서 스파크 1.0.0에 암시 적 피드백 추천인 모델을 구축하고 나는 그들의 협업 필터링 페이지에있는 예를 따르도록 노력하고 있어요 : http://spark.apache.org/docs/latest/mllib-collaborative-filtering.html#explicit-vs-implicit-feedback스파크 MLlib - 협업 필터링 암시 피드

을 그리고 심지어이 내가 암시 적 피드백 모델을 실행하려고 할 때 http://codesearch.ruethschilling.info/xref/apache-foundation/spark/mllib/data/als/test.data

: 테스트 데이터 세트들이 예에서 참조하는 최대로드 발 알파 = 0.01 발 모델 = ALS.trainImplicit (등급, 순위, numIterations, 알파)

(등급 자신의 데이터 세트 및 순위 = 10에서 정확히 평가했다 numIterations = 20) 나는 다음과 같은 오류가 점점 오전 :

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) 

는 흥미롭게도,이 모델은 trainImplicit을 수행하지 때 잘 실행 (즉 ALS.train)

답변

4

이 예제는 네 개의 매개 변수가있는 trainImplicit의 오버로드가 없으므로 구현과 동기화되지 않은 것처럼 보입니다. 이는 오류 메시지가 말하고있는 것입니다. 당신이 Scala source code for ALS 보면 그러나, 일부 '매직 넘버'를 통해 세 가지 매개 변수 오버로드는 여섯 개 개의 매개 변수 과부하의 관점에서 구현되는 것을 볼 수 있습니다 :

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

를이 0.01의 괜찮은 기본값 제안 람다. (아마 ML에 대해 더 깊이 이해하고있는 사람과 확인해 보는 것이 좋습니다.) 이것은 5 개 또는 6 개의 매개 변수 과부하에 대한 합리적인 호출을하기에 충분한 정보를 줄 수 있습니다. (당신은 더 나은 값을 선택 충분히 알고 있다면 물론, 그 위대한!) 예를 들어

:

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

또는 마지막으로

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

, 당신이 실현되지 않을 수도 꽤 괜찮은이 있음 API documentaiton for ALS.

+0

'매직 넘버'계산이 완벽합니다. 도와 줘서 고마워 !! – atellez

+0

예 0.01은 람다의 기본 값입니다. –

관련 문제