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 }
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); }