blob: 80380650e282d8fe4953dda69c9746b8b80ac990 [file] [log] [blame]
package io.prediction.algorithms.mahout.itemsim.itemsimcf
import io.prediction.algorithms.mahout.itemsim.MahoutJob
import org.apache.mahout.cf.taste.model.DataModel
import org.apache.mahout.cf.taste.common.Weighting
import org.apache.mahout.cf.taste.similarity.ItemSimilarity
import org.apache.mahout.cf.taste.impl.similarity.{
CityBlockSimilarity,
EuclideanDistanceSimilarity,
LogLikelihoodSimilarity,
PearsonCorrelationSimilarity,
TanimotoCoefficientSimilarity,
UncenteredCosineSimilarity
}
class ItemSimCFJob extends MahoutJob {
val defaultItemSimilarity = "LogLikelihoodSimilarity"
override def buildItemSimilarity(dataModel: DataModel, args: Map[String, String]): ItemSimilarity = {
val booleanData: Boolean = getArgOpt(args, "booleanData", "false").toBoolean
val itemSimilarity: String = getArgOpt(args, "itemSimilarity", defaultItemSimilarity)
val weighted: Boolean = getArgOpt(args, "weighted", "false").toBoolean
val weightedParam: Weighting = if (weighted) Weighting.WEIGHTED else Weighting.UNWEIGHTED
val similarity: ItemSimilarity = itemSimilarity match {
case "CityBlockSimilarity" => new CityBlockSimilarity(dataModel)
case "EuclideanDistanceSimilarity" => new EuclideanDistanceSimilarity(dataModel, weightedParam)
case "LogLikelihoodSimilarity" => new LogLikelihoodSimilarity(dataModel)
case "PearsonCorrelationSimilarity" => new PearsonCorrelationSimilarity(dataModel, weightedParam)
case "TanimotoCoefficientSimilarity" => new TanimotoCoefficientSimilarity(dataModel)
case "UncenteredCosineSimilarity" => new UncenteredCosineSimilarity(dataModel, weightedParam)
case _ => throw new RuntimeException("Invalid ItemSimilarity: " + itemSimilarity)
}
similarity
}
}