public void Recommend() { _stopwatch.Start(); PrepareShop(); BookDistinguishingFeatures = _bookParser.GetDistinguishingFeatures(Shop.Warehouse.Books); ItemProfiles = _itemProfilesManager.CreateProfiles(BookDistinguishingFeatures, Shop); ItemProfiles = _normalizationManager.Normalize(ItemProfiles); UserProfiles = _userProfilesManager.CreateProfiles(ItemProfiles, Shop); TFIDFRepresentation = new TFIDFRepresentation(BookDistinguishingFeatures.Count); TFIDFRepresentation.DistinguishingFeaturesDF = _tfidfManager.CalculateDF(ItemProfiles, TFIDFRepresentation); TFIDFRepresentation.DistinguishingFeaturesIDF = _tfidfManager.CalculateIDF(TFIDFRepresentation, ItemProfiles.Count); ItemProfiles = _tfidfManager.CalculateWeightedScores(TFIDFRepresentation, ItemProfiles); UsersPredictions = _userPredictionsManager.CreateUserPredictions(Shop.Clients, UserProfiles, ItemProfiles); UsersPredictions = _userPredictionsManager.PrepareResults(UsersPredictions); _stopwatch.Stop(); SimulationTime = _stopwatch.Elapsed; _printer.PrintResults(UsersPredictions, 10); _printer.PrintSimulationTime(SimulationTime); _resourceManager.SaveResults(UsersPredictions); }
public double[] CalculateIDF(TFIDFRepresentation tfidfRepresentation, int total) { double[] idf = new double[tfidfRepresentation.DistinguishingFeaturesDF.Length]; for (int i = 0; i < idf.Length; i++) { idf[i] = Math.Log10(total / tfidfRepresentation.DistinguishingFeaturesDF[i]); } return(idf); }
public ICollection <ItemProfile> CalculateWeightedScores(TFIDFRepresentation tfidf, ICollection <ItemProfile> itemProfiles) { double[] idf = tfidf.DistinguishingFeaturesIDF; ItemProfile[] itemProfilesArray = itemProfiles.ToArray(); foreach (ItemProfile item in itemProfiles) { for (int i = 0; i < idf.Length; i++) { item.WeightedScores[i] = item.DistinguishingFeaturesBinaryRepresentation[i] * idf[i]; } } return(itemProfiles); }
public double[] CalculateDF(ICollection <ItemProfile> itemProfiles, TFIDFRepresentation tfidfRepresentation) { ItemProfile[] itemProfilesArray = itemProfiles.ToArray(); double[] dfs = new double[itemProfilesArray[0].DistinguishingFeaturesBinaryRepresentation.Length]; for (int i = 0; i < itemProfilesArray[0].DistinguishingFeaturesBinaryRepresentation.Length; i++) { int counter = 0; for (int j = 0; j < itemProfilesArray.Length; j++) { if (itemProfilesArray[j].DistinguishingFeaturesBinaryRepresentation[i] != 0) { counter++; } } dfs[i] = counter; } return(dfs); }