Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object RecommendationScores {
- private def precisionAtK(k: Int, actual: Array[Int], predicted: Array[Int]): Double = {
- //val pred = predicted.take(k)
- val a = actual.length
- //actual.intersect(pred).length / a : Double
- a
- }
- def averagePrecisionAtK(k: Int) = {
- new Score[Array[Int]] with PerformanceScore {
- //TODO
- override def evaluate(data: DataSet[(Array[Int], Array[Int])]): DataSet[Double] = {
- val perUser = data.map { trueAndPred => precisionAtK(k, trueAndPred._1, trueAndPred._2)
- //val pred = trueAndPred._2.take(k)
- //val a = trueAndPred._1.length
- //trueAndPred._1.intersect(pred).length / a : Double}
- //a
- }
- //val perUser = data.map(trueAndPred => 2)
- perUser.mean()
- }
- }
- }
- def meanAveragePrecisionAtK(k: Int) = {
- new Score[Array[Int]] with PerformanceScore {
- //TODO
- override def evaluate(data: DataSet[(Array[Int], Array[Int])]): DataSet[Double] = {
- val perUser = data.map{ trueAndPred =>
- val precisions = 1 to k map (_k => precisionAtK(_k, trueAndPred._1, trueAndPred._2))
- precisions.sum / k
- }
- perUser.mean()
- }
- }
- }
- def averageRecallAtK(k: Int) = {
- new Score[Array[Int]] with PerformanceScore {
- //TODO
- override def evaluate(data: DataSet[(Array[Int], Array[Int])]): DataSet[Double] = {
- val perUser = data.map { trueAndPred =>
- val act = trueAndPred._1.toSet
- val pred = trueAndPred._2.take(k).toSet
- act.intersect(pred).size / k : Double
- }
- perUser.mean()
- }
- }
- }
- private def iDCG(k: Int) = {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement