| package io.prediction.commons.settings |
| |
| import io.prediction.commons.Spec |
| |
| import org.specs2._ |
| import org.specs2.specification.Step |
| import com.mongodb.casbah.Imports._ |
| |
| class AlgoInfosSpec extends Specification { |
| def is = s2""" |
| |
| PredictionIO AlgoInfos Specification |
| |
| Algos can be implemented by: |
| - MongoAlgoInfos ${mongoAlgoInfos} |
| |
| """ |
| |
| def mongoAlgoInfos = s2""" |
| |
| MongoAlgoInfos should" ^ |
| - behave like any AlgoInfos implementation ${algoinfos(newMongoAlgoInfos)} |
| - (database cleanup) ${Step(Spec.mongoClient(mongoDbName).dropDatabase())} |
| |
| """ |
| |
| def algoinfos(algoinfos: AlgoInfos) = s2""" |
| |
| insert and get info of an algo ${insertAndGet(algoinfos)} |
| get info of algos by their engine type ${getByEngineInfoId(algoinfos)} |
| update info of an algo ${update(algoinfos)} |
| delete info of an algo ${delete(algoinfos)} |
| backup and restore existing algoinfos ${backuprestore(algoinfos)} |
| |
| """ |
| |
| val mongoDbName = "predictionio_mongoalgoinfos_test" |
| def newMongoAlgoInfos = new mongodb.MongoAlgoInfos(Spec.mongoClient(mongoDbName)) |
| |
| def insertAndGet(algoinfos: AlgoInfos) = { |
| val ai = AlgoInfo( |
| id = "pdio-knnitembased", |
| name = "kNN Item Based Collaborative Filtering", |
| description = Some("This item-based k-NearestNeighbor algorithm predicts user preferences based on previous behaviors of users on similar items."), |
| batchcommands = Some(Seq( |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.DataPreparator --hdfs --dbType $appdataDbType$ --dbName $appdataDbName$ --dbHost $appdataDbHost$ --dbPort $appdataDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ $itypes$ --viewParam $viewParam$ --likeParam $likeParam$ --dislikeParam $dislikeParam$ --conversionParam $conversionParam$ --conflictParam $conflictParam$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.KNNItemBased --hdfs --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --measureParam $measureParam$ --priorCountParam $priorCountParam$ --priorCorrelParam $priorCorrelParam$ --minNumRatersParam $minNumRatersParam$ --maxNumRatersParam $maxNumRatersParam$ --minIntersectionParam $minIntersectionParam$ --minNumRatedSimParam $minNumRatedSimParam$ --numRecommendations $numRecommendations$ --unseenOnly $unseenOnly$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.ModelConstructor --hdfs --dbType $modeldataDbType$ --dbName $modeldataDbName$ --dbHost $modeldataDbHost$ --dbPort $modeldataDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --modelSet $modelset$")), |
| offlineevalcommands = Some(Seq( |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.DataPreparator --hdfs --dbType $appdataTrainingDbType$ --dbName $appdataTrainingDbName$ --dbHost $appdataTrainingDbHost$ --dbPort $appdataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ $itypes$ --viewParam $viewParam$ --likeParam $likeParam$ --dislikeParam $dislikeParam$ --conversionParam $conversionParam$ --conflictParam $conflictParam$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.KNNItemBased --hdfs --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ --measureParam $measureParam$ --priorCountParam $priorCountParam$ --priorCorrelParam $priorCorrelParam$ --minNumRatersParam $minNumRatersParam$ --maxNumRatersParam $maxNumRatersParam$ --minIntersectionParam $minIntersectionParam$ --minNumRatedSimParam $minNumRatedSimParam$ --numRecommendations $numRecommendations$ --unseenOnly $unseenOnly$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.ModelConstructor --hdfs --dbType $modeldataTrainingDbType$ --dbName $modeldataTrainingDbName$ --dbHost $modeldataTrainingDbHost$ --dbPort $modeldataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ --modelSet false")), |
| params = Map( |
| "foo" -> Param( |
| id = "foo", |
| name = "foo", |
| description = None, |
| defaultvalue = 0, |
| constraint = ParamIntegerConstraint(min = Some(0), max = Some(10)), |
| ui = ParamUI( |
| uitype = "selection", |
| selections = Some(Seq( |
| ParamSelectionUI("0", "0"), |
| ParamSelectionUI("2", "2"), |
| ParamSelectionUI("4", "4"), |
| ParamSelectionUI("6", "6"), |
| ParamSelectionUI("8", "8"), |
| ParamSelectionUI("10", "10")))), |
| scopes = Some(Set("dead", "beef")))), |
| paramsections = Seq( |
| ParamSection( |
| name = "foo", |
| description = None, |
| subsections = None, |
| params = None), |
| ParamSection( |
| name = "bar", |
| description = Some("deadbeef"), |
| subsections = Some(Seq( |
| ParamSection("baz", "norma", None, None, None), |
| ParamSection("jack", "normal", None, None, None))), |
| params = Some(Seq("this", "that")))), |
| paramorder = Seq( |
| "measureParam", |
| "priorCountParam", |
| "priorCorrelParam", |
| "minNumRatersParam", |
| "maxNumRatersParam", |
| "minIntersectionParam", |
| "minNumRatedSimParam", |
| "viewParam", |
| "likeParam", |
| "dislikeParam", |
| "conversionParam", |
| "conflictParam"), |
| engineinfoid = "itemrec", |
| techreq = Seq("Hadoop"), |
| datareq = Seq("Users, Items, and U2I Actions such as Like, Buy and Rate.")) |
| algoinfos.insert(ai) |
| algoinfos.get(ai.id) must beSome(ai) |
| } |
| |
| def getByEngineInfoId(algoinfos: AlgoInfos) = { |
| algoinfos.insert(AlgoInfo( |
| id = "pdio-is1", |
| name = "kNN Item Based Collaborative Filtering", |
| description = Some("This item-based k-NearestNeighbor algorithm predicts user preferences based on previous behaviors of users on similar items."), |
| batchcommands = Some(Seq( |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.DataPreparator --hdfs --dbType $appdataDbType$ --dbName $appdataDbName$ --dbHost $appdataDbHost$ --dbPort $appdataDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ $itypes$ --viewParam $viewParam$ --likeParam $likeParam$ --dislikeParam $dislikeParam$ --conversionParam $conversionParam$ --conflictParam $conflictParam$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.KNNItemBased --hdfs --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --measureParam $measureParam$ --priorCountParam $priorCountParam$ --priorCorrelParam $priorCorrelParam$ --minNumRatersParam $minNumRatersParam$ --maxNumRatersParam $maxNumRatersParam$ --minIntersectionParam $minIntersectionParam$ --minNumRatedSimParam $minNumRatedSimParam$ --numRecommendations $numRecommendations$ --unseenOnly $unseenOnly$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.ModelConstructor --hdfs --dbType $modeldataDbType$ --dbName $modeldataDbName$ --dbHost $modeldataDbHost$ --dbPort $modeldataDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --modelSet $modelset$")), |
| offlineevalcommands = Some(Seq( |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.DataPreparator --hdfs --dbType $appdataTrainingDbType$ --dbName $appdataTrainingDbName$ --dbHost $appdataTrainingDbHost$ --dbPort $appdataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ $itypes$ --viewParam $viewParam$ --likeParam $likeParam$ --dislikeParam $dislikeParam$ --conversionParam $conversionParam$ --conflictParam $conflictParam$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.KNNItemBased --hdfs --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ --measureParam $measureParam$ --priorCountParam $priorCountParam$ --priorCorrelParam $priorCorrelParam$ --minNumRatersParam $minNumRatersParam$ --maxNumRatersParam $maxNumRatersParam$ --minIntersectionParam $minIntersectionParam$ --minNumRatedSimParam $minNumRatedSimParam$ --numRecommendations $numRecommendations$ --unseenOnly $unseenOnly$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.ModelConstructor --hdfs --dbType $modeldataTrainingDbType$ --dbName $modeldataTrainingDbName$ --dbHost $modeldataTrainingDbHost$ --dbPort $modeldataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ --modelSet false")), |
| params = Map(), |
| paramsections = Seq(), |
| paramorder = Seq( |
| "measureParam", |
| "priorCountParam", |
| "priorCorrelParam", |
| "minNumRatersParam", |
| "maxNumRatersParam", |
| "minIntersectionParam", |
| "minNumRatedSimParam", |
| "viewParam", |
| "likeParam", |
| "dislikeParam", |
| "conversionParam", |
| "conflictParam"), |
| engineinfoid = "itemsim", |
| techreq = Seq("Hadoop"), |
| datareq = Seq("Users, Items, and U2I Actions such as Like, Buy and Rate."))) |
| algoinfos.insert(AlgoInfo( |
| id = "pdio-is2", |
| name = "kNN Item Based Collaborative Filtering", |
| description = Some("This item-based k-NearestNeighbor algorithm predicts user preferences based on previous behaviors of users on similar items."), |
| batchcommands = Some(Seq( |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.DataPreparator --hdfs --dbType $appdataDbType$ --dbName $appdataDbName$ --dbHost $appdataDbHost$ --dbPort $appdataDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ $itypes$ --viewParam $viewParam$ --likeParam $likeParam$ --dislikeParam $dislikeParam$ --conversionParam $conversionParam$ --conflictParam $conflictParam$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.KNNItemBased --hdfs --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --measureParam $measureParam$ --priorCountParam $priorCountParam$ --priorCorrelParam $priorCorrelParam$ --minNumRatersParam $minNumRatersParam$ --maxNumRatersParam $maxNumRatersParam$ --minIntersectionParam $minIntersectionParam$ --minNumRatedSimParam $minNumRatedSimParam$ --numRecommendations $numRecommendations$ --unseenOnly $unseenOnly$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.ModelConstructor --hdfs --dbType $modeldataDbType$ --dbName $modeldataDbName$ --dbHost $modeldataDbHost$ --dbPort $modeldataDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --modelSet $modelset$")), |
| offlineevalcommands = Some(Seq( |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.DataPreparator --hdfs --dbType $appdataTrainingDbType$ --dbName $appdataTrainingDbName$ --dbHost $appdataTrainingDbHost$ --dbPort $appdataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ $itypes$ --viewParam $viewParam$ --likeParam $likeParam$ --dislikeParam $dislikeParam$ --conversionParam $conversionParam$ --conflictParam $conflictParam$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.KNNItemBased --hdfs --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ --measureParam $measureParam$ --priorCountParam $priorCountParam$ --priorCorrelParam $priorCorrelParam$ --minNumRatersParam $minNumRatersParam$ --maxNumRatersParam $maxNumRatersParam$ --minIntersectionParam $minIntersectionParam$ --minNumRatedSimParam $minNumRatedSimParam$ --numRecommendations $numRecommendations$ --unseenOnly $unseenOnly$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.ModelConstructor --hdfs --dbType $modeldataTrainingDbType$ --dbName $modeldataTrainingDbName$ --dbHost $modeldataTrainingDbHost$ --dbPort $modeldataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ --modelSet false")), |
| params = Map(), |
| paramsections = Seq(), |
| paramorder = Seq( |
| "measureParam", |
| "priorCountParam", |
| "priorCorrelParam", |
| "minNumRatersParam", |
| "maxNumRatersParam", |
| "minIntersectionParam", |
| "minNumRatedSimParam", |
| "viewParam", |
| "likeParam", |
| "dislikeParam", |
| "conversionParam", |
| "conflictParam"), |
| engineinfoid = "itemsim", |
| techreq = Seq("Hadoop"), |
| datareq = Seq("Users, Items, and U2I Actions such as Like, Buy and Rate."))) |
| algoinfos.getByEngineInfoId("itemsim").size must beEqualTo(2) |
| } |
| |
| def update(algoinfos: AlgoInfos) = { |
| val u1 = AlgoInfo( |
| id = "pdio-u1", |
| name = "kNN Item Based Collaborative Filtering", |
| description = Some("This item-based k-NearestNeighbor algorithm predicts user preferences based on previous behaviors of users on similar items."), |
| batchcommands = Some(Seq( |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.DataPreparator --hdfs --dbType $appdataDbType$ --dbName $appdataDbName$ --dbHost $appdataDbHost$ --dbPort $appdataDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ $itypes$ --viewParam $viewParam$ --likeParam $likeParam$ --dislikeParam $dislikeParam$ --conversionParam $conversionParam$ --conflictParam $conflictParam$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.KNNItemBased --hdfs --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --measureParam $measureParam$ --priorCountParam $priorCountParam$ --priorCorrelParam $priorCorrelParam$ --minNumRatersParam $minNumRatersParam$ --maxNumRatersParam $maxNumRatersParam$ --minIntersectionParam $minIntersectionParam$ --minNumRatedSimParam $minNumRatedSimParam$ --numRecommendations $numRecommendations$ --unseenOnly $unseenOnly$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.ModelConstructor --hdfs --dbType $modeldataDbType$ --dbName $modeldataDbName$ --dbHost $modeldataDbHost$ --dbPort $modeldataDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --modelSet $modelset$")), |
| offlineevalcommands = Some(Seq( |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.DataPreparator --hdfs --dbType $appdataTrainingDbType$ --dbName $appdataTrainingDbName$ --dbHost $appdataTrainingDbHost$ --dbPort $appdataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ $itypes$ --viewParam $viewParam$ --likeParam $likeParam$ --dislikeParam $dislikeParam$ --conversionParam $conversionParam$ --conflictParam $conflictParam$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.KNNItemBased --hdfs --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ --measureParam $measureParam$ --priorCountParam $priorCountParam$ --priorCorrelParam $priorCorrelParam$ --minNumRatersParam $minNumRatersParam$ --maxNumRatersParam $maxNumRatersParam$ --minIntersectionParam $minIntersectionParam$ --minNumRatedSimParam $minNumRatedSimParam$ --numRecommendations $numRecommendations$ --unseenOnly $unseenOnly$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.ModelConstructor --hdfs --dbType $modeldataTrainingDbType$ --dbName $modeldataTrainingDbName$ --dbHost $modeldataTrainingDbHost$ --dbPort $modeldataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ --modelSet false")), |
| params = Map(), |
| paramsections = Seq(), |
| paramorder = Seq( |
| "measureParam", |
| "priorCountParam", |
| "priorCorrelParam", |
| "minNumRatersParam", |
| "maxNumRatersParam", |
| "minIntersectionParam", |
| "minNumRatedSimParam", |
| "viewParam", |
| "likeParam", |
| "dislikeParam", |
| "conversionParam", |
| "conflictParam"), |
| engineinfoid = "itemrec", |
| techreq = Seq("Hadoop"), |
| datareq = Seq("Users, Items, and U2I Actions such as Like, Buy and Rate.")) |
| algoinfos.insert(u1) |
| |
| val u2 = u1.copy(techreq = Seq("GraphLab")) |
| algoinfos.update(u2) |
| algoinfos.get(u2.id) must beSome(u2) |
| } |
| |
| def delete(algoinfos: AlgoInfos) = { |
| algoinfos.insert(AlgoInfo( |
| id = "pdio-d1", |
| name = "kNN Item Based Collaborative Filtering", |
| description = Some("This item-based k-NearestNeighbor algorithm predicts user preferences based on previous behaviors of users on similar items."), |
| batchcommands = Some(Seq( |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.DataPreparator --hdfs --dbType $appdataDbType$ --dbName $appdataDbName$ --dbHost $appdataDbHost$ --dbPort $appdataDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ $itypes$ --viewParam $viewParam$ --likeParam $likeParam$ --dislikeParam $dislikeParam$ --conversionParam $conversionParam$ --conflictParam $conflictParam$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.KNNItemBased --hdfs --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --measureParam $measureParam$ --priorCountParam $priorCountParam$ --priorCorrelParam $priorCorrelParam$ --minNumRatersParam $minNumRatersParam$ --maxNumRatersParam $maxNumRatersParam$ --minIntersectionParam $minIntersectionParam$ --minNumRatedSimParam $minNumRatedSimParam$ --numRecommendations $numRecommendations$ --unseenOnly $unseenOnly$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.ModelConstructor --hdfs --dbType $modeldataDbType$ --dbName $modeldataDbName$ --dbHost $modeldataDbHost$ --dbPort $modeldataDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --modelSet $modelset$")), |
| offlineevalcommands = Some(Seq( |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.DataPreparator --hdfs --dbType $appdataTrainingDbType$ --dbName $appdataTrainingDbName$ --dbHost $appdataTrainingDbHost$ --dbPort $appdataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ $itypes$ --viewParam $viewParam$ --likeParam $likeParam$ --dislikeParam $dislikeParam$ --conversionParam $conversionParam$ --conflictParam $conflictParam$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.KNNItemBased --hdfs --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ --measureParam $measureParam$ --priorCountParam $priorCountParam$ --priorCorrelParam $priorCorrelParam$ --minNumRatersParam $minNumRatersParam$ --maxNumRatersParam $maxNumRatersParam$ --minIntersectionParam $minIntersectionParam$ --minNumRatedSimParam $minNumRatedSimParam$ --numRecommendations $numRecommendations$ --unseenOnly $unseenOnly$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.ModelConstructor --hdfs --dbType $modeldataTrainingDbType$ --dbName $modeldataTrainingDbName$ --dbHost $modeldataTrainingDbHost$ --dbPort $modeldataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ --modelSet false")), |
| params = Map(), |
| paramsections = Seq(), |
| paramorder = Seq( |
| "measureParam", |
| "priorCountParam", |
| "priorCorrelParam", |
| "minNumRatersParam", |
| "maxNumRatersParam", |
| "minIntersectionParam", |
| "minNumRatedSimParam", |
| "viewParam", |
| "likeParam", |
| "dislikeParam", |
| "conversionParam", |
| "conflictParam"), |
| engineinfoid = "itemrec", |
| techreq = Seq("Hadoop"), |
| datareq = Seq("Users, Items, and U2I Actions such as Like, Buy and Rate."))) |
| algoinfos.delete("pdio-d1") |
| algoinfos.get("pdio-d1") must beNone |
| } |
| |
| def backuprestore(algoinfos: AlgoInfos) = { |
| val ai = AlgoInfo( |
| id = "pdio-br", |
| name = "kNN Item Based Collaborative Filtering", |
| description = Some("This item-based k-NearestNeighbor algorithm predicts user preferences based on previous behaviors of users on similar items."), |
| batchcommands = Some(Seq( |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.DataPreparator --hdfs --dbType $appdataDbType$ --dbName $appdataDbName$ --dbHost $appdataDbHost$ --dbPort $appdataDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ $itypes$ --viewParam $viewParam$ --likeParam $likeParam$ --dislikeParam $dislikeParam$ --conversionParam $conversionParam$ --conflictParam $conflictParam$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.KNNItemBased --hdfs --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --measureParam $measureParam$ --priorCountParam $priorCountParam$ --priorCorrelParam $priorCorrelParam$ --minNumRatersParam $minNumRatersParam$ --maxNumRatersParam $maxNumRatersParam$ --minIntersectionParam $minIntersectionParam$ --minNumRatedSimParam $minNumRatedSimParam$ --numRecommendations $numRecommendations$ --unseenOnly $unseenOnly$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.ModelConstructor --hdfs --dbType $modeldataDbType$ --dbName $modeldataDbName$ --dbHost $modeldataDbHost$ --dbPort $modeldataDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --modelSet $modelset$")), |
| offlineevalcommands = Some(Seq( |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.DataPreparator --hdfs --dbType $appdataTrainingDbType$ --dbName $appdataTrainingDbName$ --dbHost $appdataTrainingDbHost$ --dbPort $appdataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ $itypes$ --viewParam $viewParam$ --likeParam $likeParam$ --dislikeParam $dislikeParam$ --conversionParam $conversionParam$ --conflictParam $conflictParam$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.KNNItemBased --hdfs --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ --measureParam $measureParam$ --priorCountParam $priorCountParam$ --priorCorrelParam $priorCorrelParam$ --minNumRatersParam $minNumRatersParam$ --maxNumRatersParam $maxNumRatersParam$ --minIntersectionParam $minIntersectionParam$ --minNumRatedSimParam $minNumRatedSimParam$ --numRecommendations $numRecommendations$ --unseenOnly $unseenOnly$", |
| "$hadoop$ jar $jar$ io.prediction.algorithms.scalding.itemrec.knnitembased.ModelConstructor --hdfs --dbType $modeldataTrainingDbType$ --dbName $modeldataTrainingDbName$ --dbHost $modeldataTrainingDbHost$ --dbPort $modeldataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --algoid $algoid$ --evalid $evalid$ --modelSet false")), |
| params = Map( |
| "foo" -> Param( |
| id = "foo", |
| name = "foo", |
| description = None, |
| defaultvalue = 0, |
| constraint = ParamIntegerConstraint(min = Some(0), max = Some(10)), |
| ui = ParamUI( |
| uitype = "selection", |
| selections = Some(Seq( |
| ParamSelectionUI("0", "0"), |
| ParamSelectionUI("2", "2"), |
| ParamSelectionUI("4", "4"), |
| ParamSelectionUI("6", "6"), |
| ParamSelectionUI("8", "8"), |
| ParamSelectionUI("10", "10")))), |
| scopes = Some(Set("dead", "beef"))), |
| "bar" -> Param( |
| id = "bar", |
| name = "bar", |
| description = Some("random description"), |
| defaultvalue = false, |
| constraint = ParamBooleanConstraint(), |
| ui = ParamUI( |
| uitype = "slider", |
| slidermin = Some(10), |
| slidermax = Some(20), |
| sliderstep = Some(2)), |
| scopes = None), |
| "dead" -> Param( |
| id = "dead", |
| name = "dead", |
| description = None, |
| defaultvalue = "dead", |
| constraint = ParamStringConstraint(), |
| ui = ParamUI(), |
| scopes = None), |
| "beef" -> Param( |
| id = "beef", |
| name = "beef", |
| description = None, |
| defaultvalue = 3.14, |
| constraint = ParamDoubleConstraint(), |
| ui = ParamUI(), |
| scopes = None)), |
| paramsections = Seq( |
| ParamSection( |
| name = "foo", |
| description = None, |
| subsections = None, |
| params = None), |
| ParamSection( |
| name = "bar", |
| description = Some("deadbeef"), |
| subsections = Some(Seq( |
| ParamSection("baz", "normal", None, None, None), |
| ParamSection("jack", "normal", None, None, None))), |
| params = Some(Seq("this", "that")))), |
| paramorder = Seq( |
| "measureParam", |
| "priorCountParam", |
| "priorCorrelParam", |
| "minNumRatersParam", |
| "maxNumRatersParam", |
| "minIntersectionParam", |
| "minNumRatedSimParam", |
| "viewParam", |
| "likeParam", |
| "dislikeParam", |
| "conversionParam", |
| "conflictParam"), |
| engineinfoid = "itemrec", |
| techreq = Seq("Hadoop"), |
| datareq = Seq("Users, Items, and U2I Actions such as Like, Buy and Rate.")) |
| algoinfos.insert(ai) |
| val fn = "algoinfos.json" |
| val fos = new java.io.FileOutputStream(fn) |
| try { |
| fos.write(algoinfos.backup()) |
| } finally { |
| fos.close() |
| } |
| algoinfos.restore(scala.io.Source.fromFile(fn)(scala.io.Codec.UTF8).mkString.getBytes("UTF-8")) map { ralgoinfos => |
| ralgoinfos must contain(ai) |
| } getOrElse 1 === 2 |
| } |
| } |