示例#1
0
        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);
        }