private List <ClusterDistanceModel> CalculateDistances(double[,] centroids) { List <ClusterDistanceModel> result = new List <ClusterDistanceModel>(); foreach (TransactionMatrixModel personId in TransactionMatrix) { ClusterDistanceModel model = new ClusterDistanceModel { PersonId = personId.PersonId, ClusterDistances = new Dictionary <int, double>() }; for (int i = 0; i < NumberOfClusters; i++) { double distance = 0; for (int j = 0; j < NumberOfVectors; j++) { if (personId.Values[j] == 0 && i == j) { continue; } distance += EuclideanDistance(personId.Values[j], centroids[i, j]); /*Math.Pow(personId.Values[j] - centroids[i, j], 2);*/ } distance = Math.Sqrt(distance); model.ClusterDistances.Add(i, distance); } model.CurrentCluster = SelectCluster(model); result.Add(model); } return(result); }
private int SelectCluster(ClusterDistanceModel model) { return(model.ClusterDistances.Where( m => m.Value.Equals(model.ClusterDistances.Min(n => n.Value))) .Select(m => m.Key).First()); }