Exemplo n.º 1
0
            public ProcessedResults Reduce(IEnumerable <ProcessedResults> elements)
            {
                List <PartialMean> aggregatedMeans = new List <PartialMean>();
                List <PartialMean> totalList       = new List <PartialMean>();
                float aggregatedLoss = 0;

                foreach (var element in elements)
                {
                    totalList.AddRange(element.Means);
                    aggregatedLoss += element.Loss;
                }

                // we infer the value of K from the labeled data
                int clustersNum = totalList.Max(p => p.Mean.Label) + 1;

                for (int i = 0; i < clustersNum; i++)
                {
                    List <PartialMean> means = totalList.Where(m => m.Mean.Label == i).ToList();
                    PartialMean        aggregatedPartialMean = PartialMean.AggregatedPartialMean(means);
                    aggregatedMeans.Add(new PartialMean(aggregatedPartialMean.Mean, aggregatedPartialMean.Size));
                }

                ProcessedResults returnMeans = new ProcessedResults(aggregatedMeans, aggregatedLoss);

                Logger.Log(Level.Info, "The true means aggregated by the reduce function: " + returnMeans);
                return(returnMeans);
            }