Beispiel #1
0
        private static int GetBiggestCluster(PriorityQue <ClusterPoint> nearestPoints)
        {
            var clusters = new Dictionary <int, int>();

            while (!nearestPoints.IsEmpty)
            {
                var queItem = nearestPoints.Pop();

                if (!clusters.ContainsKey(queItem.Item.Cluster))
                {
                    clusters[queItem.Item.Cluster] = 0;
                }

                clusters[queItem.Item.Cluster] += 1;
            }

            return(clusters.OrderBy(x => x.Value).First().Key);
        }
Beispiel #2
0
        public override int ClassifyPoint(GenericVector point)
        {
            var nearestPoints = new PriorityQue <ClusterPoint>();

            foreach (var cluster in _trainingData)
            {
                foreach (var clusterPoint in cluster.Value)
                {
                    var distanceToClusterPoint = GenericVector.Distance(point, clusterPoint);

                    if (nearestPoints.Count < _k)
                    {
                        nearestPoints.Insert(distanceToClusterPoint, new ClusterPoint(clusterPoint, cluster.Key));
                    }
                    else if (distanceToClusterPoint < nearestPoints.Peek().Priority)
                    {
                        nearestPoints.Pop();
                        nearestPoints.Insert(distanceToClusterPoint, new ClusterPoint(clusterPoint, cluster.Key));
                    }
                }
            }

            return(GetBiggestCluster(nearestPoints));
        }