public double EvaluateScoreForUSer(int userId, ISettings settings) { _helpers.SaveSettings(settings.Id); var users = _selector.SelectUsersIdsToCompareWith(userId); var similarUsers = _nearestNeighbors.GetNearestNeighbors(userId, users, settings); var scores = _recommender.PredictScoreForAllUsersBooks(similarUsers, userId); _helpers.PersistSimilarUsersInDb(similarUsers, settings.Id); _helpers.PersistTestResult(scores, settings.Id); return(EvaluatePredictionsUsingRSME(scores)); }
public void EvaluateScoreForUSer_ShouldComputeError(double[] predicted, short[] actual, double error) { const int userId = 1; var scores = _testHelpers.CreateBookScores(userId, new[] { "1", "2", "3" }, actual, predicted).ToList(); var users = new List <int> { }; var similarUsers = new List <UsersSimilarity>(); _selector.SelectUsersIdsToCompareWith(userId).Returns(users); _nearestNeighbors.GetNearestNeighbors(userId, users, _settings).Returns(similarUsers); _recommender.PredictScoreForAllUsersBooks(similarUsers, userId).Returns(scores); _sut.EvaluateScoreForUSer(userId, _settings).ShouldBe(error); _cfHelpers.Received().PersistSimilarUsersInDb(similarUsers, _settings.Id); _cfHelpers.Received().PersistTestResult(scores, _settings.Id); _cfHelpers.Received().SaveSettings(_settings.Id); }
public Book[] RecommendBooksForUser(int userId, ISettings settings) { // get from db by default var books = _recommender.GetRecommendedBooksFromDatabase(userId); if (books.Length != 0) { return(books); } var users = _selector.SelectUsersIdsToCompareWith(userId); var similarUsers = _nearestNeighbors.GetNearestNeighbors(userId, users, settings); return(_recommender.GetRecommendedBooks(similarUsers, userId)); }