예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="otherFeature"></param>
        /// <returns></returns>
        public override Feature Sum(Feature otherFeature)
        {
            //#####check if otherFeature is null
            ComplexFeature feature    = (ComplexFeature)otherFeature;
            ComplexFeature newFeature = new ComplexFeature(this.distanceMetric);

            for (int i = 0; i < this.childFeatures.Count; i++)
            {
                newFeature.AddChildFeature(this.childFeatures.ElementAt(i).Sum(feature.GetChildFeature(i)));
            }
            return(newFeature);
        }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="divisor"></param>
        /// <returns></returns>
        public override Feature Average(int divisor)
        {
            //#####check divisor not negative or zero
            try
            {
                ComplexFeature newComplex = new ComplexFeature(this.distanceMetric);

                for (int i = 0; i < this.childFeatures.Count; i++)
                {
                    newComplex.AddChildFeature(this.childFeatures.ElementAt(i).Average(divisor));
                }
                return(newComplex);
            }
            //#### FIIIIXXXXXX
            catch (DivideByZeroException)
            {
                return(null);
            }
        }
예제 #3
0
        static void Main(string[] args)
        {
            DistanceMetric firstMetric   = new AbsoluteDistance();
            Feature        testFeature9  = new DoubleFeature(firstMetric, 13.0);
            Feature        testFeature8  = new DoubleFeature(firstMetric, 12.0);
            Feature        testFeature   = new DoubleFeature(new AbsoluteDistance(), 7.0);
            Feature        testFeature1  = new DoubleFeature(new AbsoluteDistance(), 11.0);
            Feature        testFeature2  = new DoubleFeature(new AbsoluteDistance(), 27.0);
            Feature        testFeature3  = new DoubleFeature(new AbsoluteDistance(), 6.0);
            Feature        testFeature4  = new DoubleFeature(new AbsoluteDistance(), 19.0);
            Feature        testFeature5  = new DoubleFeature(new AbsoluteDistance(), 17.0);
            Feature        testFeature6  = new DoubleFeature(new AbsoluteDistance(), 10.0);
            Feature        testFeature7  = new DoubleFeature(new AbsoluteDistance(), 11.0);
            Feature        testFeature10 = new DoubleFeature(new AbsoluteDistance(), 14.0);
            Feature        testFeature11 = new DoubleFeature(new AbsoluteDistance(), 15.0);
            Feature        testFeature12 = new DoubleFeature(new AbsoluteDistance(), 16.0);
            Feature        testFeature13 = new DoubleFeature(new AbsoluteDistance(), 17.0);
            Feature        testFeature14 = new DoubleFeature(new AbsoluteDistance(), 18.0);
            Feature        testFeature15 = new DoubleFeature(new AbsoluteDistance(), 19.0);
            Feature        testFeature16 = new DoubleFeature(new AbsoluteDistance(), 20.0);
            Feature        testFeature17 = new DoubleFeature(new AbsoluteDistance(), 21.0);
            Feature        testFeature18 = new DoubleFeature(new AbsoluteDistance(), 22.0);
            Feature        testFeature19 = new DoubleFeature(new AbsoluteDistance(), 23.0);
            Feature        testFeature20 = new DoubleFeature(new AbsoluteDistance(), 24.0);
            Feature        testFeature21 = new DoubleFeature(new AbsoluteDistance(), 25.0);
            Feature        testFeature22 = new DoubleFeature(new AbsoluteDistance(), 26.0);
            Feature        testFeature23 = new DoubleFeature(new AbsoluteDistance(), 27.0);
            Feature        testFeature24 = new DoubleFeature(new AbsoluteDistance(), 28.0);
            Feature        testFeature25 = new DoubleFeature(new AbsoluteDistance(), 29.0);

            //First
            ComplexFeature testComplex1 = new ComplexFeature(new EuclideanDistance());

            testComplex1.AddChildFeature(testFeature1);
            testComplex1.AddChildFeature(testFeature2);

            Observation testObservation1 = new Observation(2);

            testObservation1.AddFeature(testFeature);
            testObservation1.AddFeature(testComplex1);

            //second
            ComplexFeature testComplex2 = new ComplexFeature(new EuclideanDistance());

            testComplex2.AddChildFeature(testFeature3);
            testComplex2.AddChildFeature(testFeature4);

            Observation testObservation2 = new Observation(2);

            testObservation2.AddFeature(testFeature5);
            testObservation2.AddFeature(testComplex2);

            //third
            ComplexFeature testComplex3 = new ComplexFeature(new EuclideanDistance());

            testComplex3.AddChildFeature(testFeature6);
            testComplex3.AddChildFeature(testFeature7);

            Observation testObservation3 = new Observation(2);

            testObservation3.AddFeature(testFeature8);
            testObservation3.AddFeature(testComplex3);

            //fourth
            ComplexFeature testComplex4 = new ComplexFeature(new EuclideanDistance());

            testComplex4.AddChildFeature(testFeature9);
            testComplex4.AddChildFeature(testFeature10);

            Observation testObservation4 = new Observation(2);

            testObservation4.AddFeature(testFeature11);
            testObservation4.AddFeature(testComplex4);

            //fifth
            ComplexFeature testComplex5 = new ComplexFeature(new EuclideanDistance());

            testComplex5.AddChildFeature(testFeature12);
            testComplex5.AddChildFeature(testFeature13);

            Observation testObservation5 = new Observation(2);

            testObservation5.AddFeature(testFeature14);
            testObservation5.AddFeature(testComplex5);


            //sixth
            ComplexFeature testComplex6 = new ComplexFeature(new EuclideanDistance());

            testComplex6.AddChildFeature(testFeature15);
            testComplex6.AddChildFeature(testFeature16);

            Observation testObservation6 = new Observation(2);

            testObservation6.AddFeature(testFeature17);
            testObservation6.AddFeature(testComplex6);

            //seventh
            ComplexFeature testComplex7 = new ComplexFeature(new EuclideanDistance());

            testComplex7.AddChildFeature(testFeature18);
            testComplex7.AddChildFeature(testFeature19);

            Observation testObservation7 = new Observation(2);

            testObservation7.AddFeature(testFeature20);
            testObservation7.AddFeature(testComplex7);

            //eigth
            ComplexFeature testComplex8 = new ComplexFeature(new EuclideanDistance());

            testComplex8.AddChildFeature(testFeature21);
            testComplex8.AddChildFeature(testFeature22);

            Observation testObservation8 = new Observation(2);

            testObservation8.AddFeature(testFeature23);
            testObservation8.AddFeature(testComplex8);


            //two clusters
            List <Observation> centroids = new List <Observation>
            {
                testObservation1,
                testObservation2
            };

            List <Observation> obs = new List <Observation>
            {
                testObservation3,
                testObservation4,
                testObservation5,
                testObservation6,
                testObservation7,
                testObservation8
            };

            Console.Write("Observations initialized");
            Console.Read();
            KMeans means = new KMeans(3, 0.1, 2);

            means.InitializeCentroids(centroids);
            means.AssignCluster(obs);
            means.ReCalculateCentroids();
        }