Ejemplo n.º 1
0
        public void setupEscenario1()
        {
            Dictionary <Customer, DataPoint> mapCusToDP = new Dictionary <Customer, DataPoint>();
            Dictionary <int, Item>           mapDimToIt = new Dictionary <int, Item>();

            mapCusToDP.Add(new Customer("1", "alv", "alv", "alv", "alv"), new DataPoint(1, new double[] { 2, 8, 4, 0, 6, 7, 0 }));
            mapCusToDP.Add(new Customer("2", "alv", "alv", "alv", "alv"), new DataPoint(2, new double[] { 0, 2, 5, 6, 1, 8, 0 }));
            mapCusToDP.Add(new Customer("3", "alv", "alv", "alv", "alv"), new DataPoint(3, new double[] { 2, 2, 3, 9, 0, 5, 3 }));
            mapCusToDP.Add(new Customer("4", "alv", "alv", "alv", "alv"), new DataPoint(4, new double[] { 2, 8, 4, 0, 6, 7, 0 }));
            mapCusToDP.Add(new Customer("5", "alv", "alv", "alv", "alv"), new DataPoint(5, new double[] { 2, 0, 4, 0, 6, 3, 0 }));
            mapCusToDP.Add(new Customer("6", "alv", "alv", "alv", "alv"), new DataPoint(6, new double[] { 5, 0, 2, 0, 6, 0, 9 }));
            mapCusToDP.Add(new Customer("7", "alv", "alv", "alv", "alv"), new DataPoint(7, new double[] { 2, 3, 4, 5, 0, 7, 0 }));
            mapCusToDP.Add(new Customer("8", "alv", "alv", "alv", "alv"), new DataPoint(8, new double[] { 0, 9, 0, 0, 6, 7, 1 }));
            mapDimToIt.Add(0, new Item("a", "lv"));
            mapDimToIt.Add(1, new Item("b", "lv"));
            mapDimToIt.Add(2, new Item("c", "lv"));
            mapDimToIt.Add(3, new Item("d", "lv"));
            mapDimToIt.Add(4, new Item("e", "lv"));
            mapDimToIt.Add(5, new Item("f", "lv"));
            mapDimToIt.Add(6, new Item("g", "lv"));
            kMeans = new SimilarityAnalysisKMeans(4, 3, 7, 9, mapCusToDP, mapDimToIt);
        }
Ejemplo n.º 2
0
 private void setupEscenario2()
 {
     kMeans = new SimilarityAnalysisKMeans(4, 3, 7, 9, new Dictionary <Customer, DataPoint>(), new Dictionary <int, Item>());
 }
Ejemplo n.º 3
0
        public List <Recommendation> GetItemsCustomersMightBuyMoreButBuyFew(int numberOfGroups, int numberOfItemsInAnalysis, int minimumNumberOfItemPerCustomer, int numberOfItemsToRecommend)
        {
            int numberOfIterations        = 100;
            SimilarityAnalysisKMeans sakm = new SimilarityAnalysisKMeans(data, numberOfItemsInAnalysis, numberOfGroups, numberOfIterations, minimumNumberOfItemPerCustomer);

            sakm.Kmeans();
            List <List <Tuple <Customer, double[]> > > groups = sakm.GetCustomers();
            List <Recommendation> recommendations             = new List <Recommendation>();
            int groupNum = 0;

            foreach (List <Tuple <Customer, double[]> > group in groups)
            {
                double[] average = new double[sakm.dimensionOfDataPoints];
                foreach (Tuple <Customer, double[]> items in group)
                {
                    double[] vec = items.Item2;
                    for (int i = 0; i < vec.Length; i++)
                    {
                        average[i] += vec[i];
                    }
                }
                for (int i = 0; i < average.Length; i++)
                {
                    average[i] = average[i] / group.Count;
                }
                foreach (Tuple <Customer, double[]> customer in group)
                {
                    List <Tuple <Item, double> > diffs = new List <Tuple <Item, double> >();
                    for (int i = 0; i < customer.Item2.GetLength(0); i++)
                    {
                        diffs.Add(new Tuple <Item, double>(sakm.mapFromDimensionToItem[i], average[i] - customer.Item2[i]));
                    }
                    diffs = diffs.OrderByDescending(t => t.Item2).Take(numberOfItemsToRecommend).ToList();
                    Recommendation re = new Recommendation(diffs);
                    re.customerRepresentation = customer.Item2;
                    re.customer   = customer.Item1;
                    re.groupColor = groupNum;
                    recommendations.Add(re);
                }
                groupNum++;
            }
            recommendations.Sort();
            double[][] matrix = new double[recommendations.Count][];
            for (int i = 0; i < recommendations.Count; i++)
            {
                double[] dat = recommendations[i].customerRepresentation;
                matrix[i] = dat;
            }
            PrincipalComponentAnalysis pca = new PrincipalComponentAnalysis(matrix);

            pca.NumberOfOutputs = 2;

            // Compute the Principal Component Analysis
            pca.Compute();

            // Creates a projection
            double[][] components = pca.Transform(matrix);
            for (int i = 0; i < components.GetLength(0); i++)
            {
                recommendations[i].customer2dRepresentation = components[i];
            }
            recommendations = recommendations.OrderBy(r => r.customer.id).ToList();
            return(recommendations);
        }