private void InitializeClusterCentroid(out List <Centeroid <T> > centroid, int count)
        {
            Centeroid <T> c;

            centroid = new List <Centeroid <T> >();
            for (int i = 0; i < count; i++)
            {
                c = new Centeroid <T>();
                c.GroupedDocument = new List <DocumentVector <T> >();
                centroid.Add(c);
            }
        }
        public List <Centeroid <T> > PrepareDocumentCluster(IList <DocumentVector <T> > documentCollection)
        {
            globalCounter = 0;
            List <Centeroid <T> > centroidCollection = new List <Centeroid <T> >();
            Centeroid <T>         c;
            HashSet <int>         uniqRand = new HashSet <int>();

            GenerateRandomNumber(ref uniqRand, _clustersCount, documentCollection.Count);

            foreach (int pos in uniqRand)
            {
                c = new Centeroid <T>();
                c.GroupedDocument = new List <DocumentVector <T> >();
                c.GroupedDocument.Add(documentCollection[pos]);
                centroidCollection.Add(c);
            }
            Boolean stoppingCriteria;
            List <Centeroid <T> > resultSet;
            List <Centeroid <T> > prevClusterCenter;

            InitializeClusterCentroid(out resultSet, centroidCollection.Count);
            do
            {
                prevClusterCenter = centroidCollection;
                foreach (DocumentVector <T> obj in documentCollection)
                {
                    int index = FindClosestClusterCenter(centroidCollection, obj);
                    resultSet[index].GroupedDocument.Add(obj);
                }
                InitializeClusterCentroid(out centroidCollection, centroidCollection.Count());
                centroidCollection = CalculateMeanPoints(resultSet);
                stoppingCriteria   = CheckStoppingCriteria(prevClusterCenter, centroidCollection);
                if (!stoppingCriteria)
                {
                    //initialize the result set for next iteration
                    InitializeClusterCentroid(out resultSet, centroidCollection.Count);
                }
            } while (stoppingCriteria == false);
            _counter = counter;
            return(resultSet);
        }
예제 #3
0
        public List <Centeroid <T> > PrepareDocumentCluster(IList <DocumentVector <T> > documentCollection)
        {
            var centroidCollection = new List <Centeroid <T> >();
            var uniqRand           = new HashSet <int>();

            GenerateRandomNumber(ref uniqRand, _clustersCount);

            foreach (int pos in uniqRand)
            {
                var c = new Centeroid <T>();
                c.GroupedDocument.Add(documentCollection[pos]);
                centroidCollection.Add(c);
            }

            InitializeClusterCentroid(out List <Centeroid <T> > resultSet, centroidCollection.Count);

            foreach (DocumentVector <T> obj in documentCollection)
            {
                int index = FindClosestClusterCenter(centroidCollection, obj);
                resultSet[index].GroupedDocument.Add(obj);
            }
            return(resultSet);
        }