Esempio n. 1
0
        private double CalculateDissimilarity(TransactionMatrixModel pointOne, List <TransactionMatrixModel> otherPoints)
        {
            List <double> distances   = new List <double>();
            int           personCount = 0;

            foreach (TransactionMatrixModel otherPoint in otherPoints)
            {
                if (otherPoints.Count == 1)
                {
                    return(0);
                }

                if (pointOne.PersonId == otherPoint.PersonId)
                {
                    continue;
                }

                double distance = 0;
                for (int i = 0; i < NumberOfVectors; i++)
                {
                    distance += EuclideanDistance(pointOne.Values[i], otherPoint.Values[i]);
                }

                distances.Add(Math.Sqrt(distance));
                personCount++;
            }

            return(distances.Sum() / personCount);

            // elke persoon
            // distance met adnere in dezelfde cluster
            // average
        }
Esempio n. 2
0
        private List <TransactionMatrixModel> TransformData(List <TransactionModel> transactions)
        {
            int maxOffer = transactions.Max(m => m.OfferteId);
            List <TransactionMatrixModel> result = new List <TransactionMatrixModel>();

            foreach (var personTransactions in transactions.GroupBy(m => m.PersonId))
            {
                TransactionMatrixModel matrixRow = new TransactionMatrixModel {
                    PersonId = personTransactions.Key, Values = new int[maxOffer]
                };

                for (int i = 0; i < maxOffer; i++)
                {
                    matrixRow.Values[i] = personTransactions.Count(m => m.OfferteId == i + 1) > 0 ? 1 : 0;
                }

                result.Add(matrixRow);
            }

            return(result);
        }